如何判断表中字段是否包含另一个字段的值?

流小凯 总经理  2015-07-30 03:20:44
各位大神,小弟初学sql想请教一个问题~~先谢谢大家啦~~
例如我有两个表:

表A:personal (人员表)

pid name
1 aaa
2 bbb
3 ccc
4 ddd
5 eee
6 ffff
7 ggg

表B:metting (会议表,pidlist代表参加会议的人员,用“|”分隔)

bid pidlist
1 |2|3|4|
2 |1|3|4|
3 |1|2|4|

我想要 列出表A中没有参加会议的人,sql语句应该如何写?
...全文
4501 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
流小凯 2015-08-04
这个很好~~
回复
zhll2046 2015-07-30
照抄楼上的DDL.
create table personal
(
pid int,
name varchar(5)
)
 
create table meeting
(
bid int,
pidlist varchar(20)
)
 
insert personal 
select 1,'aaa' union 
select 2,'bbb' union 
select 3,'ccc' union 
select 4,'ddd' union 
select 5,'eee' union 
select 6,'fff' union 
select 7,'ggg' 
 
insert meeting 
select 1,'|2|3|4|' union
select 2,'|1|3|4|' union 
select 3,'|1|2|4|' 
 

SELECT * FROM personal p WHERE NOT EXISTS(SELECT 1 FROM meeting WHERE CHARINDEX(CAST(p.pid AS VARCHAR(20)),pidlist)>0)

 
另外建议不要这样保存pidlist,这样不仅无法使用索引,对于更的需求会造成更大的不变。 使用多对多的关系保存人员和会议,这种pidlist只需要在做报表时呈现就可以了。
回复
RINK_1 2015-07-30
SELECT * FROM personal WHERE pid NOT IN (select DISTINCT B.PID from meeting as a ,personal as b where a.pidlist like '%|'+cast(b.pid as varchar)+'|%')
回复
流小凯 2015-07-30


运行是上面的结果....

我只是想列出没有参加过任何会议的人的名单,这个结果不太对...
回复
流小凯 2015-07-30
相当感谢~~~仔细研究一下
回复
reenjie 2015-07-30
可以試一下下面的sql

create table personal
(
pid int,
name varchar(5)
)

create table meeting
(
bid int,
pidlist varchar(20)
)

insert personal 
select 1,'aaa' union 
select 2,'bbb' union 
select 3,'ccc' union 
select 4,'ddd' union 
select 5,'eee' union 
select 6,'fff' union 
select 7,'ggg' 

insert meeting 
select 1,'|2|3|4|' union
select 2,'|1|3|4|' union 
select 3,'|1|2|4|' 

select * from meeting as a ,personal  as b 
where a.pidlist not like '%|'+cast(b.pid as varchar)+'|%'

使用charindex()也可以實現
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2015-07-30 03:20
社区公告
暂无公告