表A
id name
1 小明
2 小刚
3 小刘
4 小王表B
id class nameid
1 打篮球 1,2,3,
2 踢足球 2,3,4,
3 打兵乓球 1,3,4,表B的nameid 与表A的ID对应如何select出会打篮球的人名
id name
1 小明
2 小刚
3 小刘
4 小王表B
id class nameid
1 打篮球 1,2,3,
2 踢足球 2,3,4,
3 打兵乓球 1,3,4,表B的nameid 与表A的ID对应如何select出会打篮球的人名
INSERT @TA
SELECT 1, N'小明' UNION ALL
SELECT 2, N'小刚' UNION ALL
SELECT 3, N'小刘' UNION ALL
SELECT 4, N'小王'DECLARE @TB TABLE([id] INT, [class] NVARCHAR(4), [nameid] VARCHAR(6))
INSERT @TB
SELECT 1, N'打篮球', '1,2,3,' UNION ALL
SELECT 2, N'踢足球', '2,3,4,' UNION ALL
SELECT 3, N'打兵乓球', '1,3,4,'SELECT name
FROM @TA AS A, @TB AS B
WHERE CHARINDEX(','+RTRIM(A.id)+',', ','+nameid)>0
AND class=N'打篮球'
/*
name
----
小明
小刚
小刘
*/
go
create table [a]([id] int,[name] varchar(10))
insert [a] select 1,'小明'
union all select 2,'小刚'
union all select 3,'小刘'
union all select 4,'小王'if object_id('[b]') is not null drop table [b]
go
create table [b]([id] int,[class] varchar(10),[nameid] varchar(10))
insert [b] select 1,'打篮球','1,2,3,'
union all select 2,'踢足球','2,3,4,'
union all select 3,'打兵乓球','1,3,4,'select name from a where charindex(ltrim(id)+',',(select nameid from b where class ='打篮球'))>0
/*
name
----------
小明
小刚
小刘(3 行受影响)
*/
SELECT
*
FROM A
WHERE EXISTS(SELECT * FROM B WHERE CHARIDENX(','+CONVERT(VARCHAR,A.ID)+',',','+B.NAMEID+',')>0)
改正下select name from a where charindex(ltrim(id)+',',(select nameid from b where class ='打篮球'))>0
*
FROM A
WHERE EXISTS(SELECT * FROM B WHERE CHARINDEX(','+CONVERT(VARCHAR,A.ID)+',',','+B.NAMEID+',')>0)
SELECT
*
FROM A
WHERE EXISTS(SELECT * FROM B WHERE CHARIDENX(','+CONVERT(VARCHAR,A.ID)+',',','+B.NAMEID+',')>0)
AND B.[CLASS]='打篮球'老出错,忘条件了!