有三张表,message,list和message_list_assoc
一条message可以关联多个list保存在message_list_assoc中
如
message_id list_id
1 1
1 2
1 3
1 4
2 1
2 2
2 3
我要如何得到只跟list_id为1,2,3关联的message_id呢,也就是说查询结果是2.
大家帮帮忙啊!
一条message可以关联多个list保存在message_list_assoc中
如
message_id list_id
1 1
1 2
1 3
1 4
2 1
2 2
2 3
我要如何得到只跟list_id为1,2,3关联的message_id呢,也就是说查询结果是2.
大家帮帮忙啊!
解决方案 »
- 现在网上流传的被泄露的数据库都是什么样的数据库?
- 我的这个存储过程 出错了,提示必须含storedprocedure
- 请问SQL Server里面的endpoint是什么概念,表示什么意思?
- 大家好我来问一个sql语句的问题,怎么能随即的只取一部分数据
- EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数 = 3,当前计数 = 0。
- 批量生成流水号更新失败,求助,
- 我是菜鸟 有条SQL语句请高手指点
- sql中前几个月的查询?
- 各位高手帮我查查错!我实在没有办法了!
- 我在lan在连接别人的sql server时,怎么也登不上,我还是用sa登陆的~!~!
- 查询问题???请教
- SQL时间判断求合问题,高手进
where list_id in(1,2,3)
group by message_id
having count(1)=3
insert @message select 1, 1
union all select 1, 2
union all select 1, 3
union all select 1, 4
union all select 2, 1
union all select 2, 2
union all select 2, 3select message_id from @message
where message_id in
(select message_id from @message
where list_id in(1,2,3)group by message_id having count(1)=3)
group by message_id having count(1)=3
(所影响的行数为 7 行)message_id
-----------
2(所影响的行数为 1 行)
distinct l.message_id
from
list l
where
not exists(select 1 from list where message_id=l.message_id and list_id not in(1,2,3))
insert @message select 1, 1
union all select 1, 2
union all select 1, 3
union all select 1, 4
union all select 2, 1
union all select 2, 2
union all select 2, 3select distinct message_id from @message a
where message_id in(1,2,3)and
exists(select message_id from @message
where message_id=a.message_id
group by message_id having count(1)=3)(所影响的行数为 7 行)message_id
-----------
2(所影响的行数为 1 行)
where exists(select * from message_list_assoc where list_id = 1 and message_list_assoc.messageid = message.messageid)
and exists(select * from message_list_assoc where list_id = 2 and message_list_assoc.messageid = message.messageid)
exists(select * from message_list_assoc where list_id = 3 and message_list_assoc.messageid = message.messageid)
1 1
1 2
1 3
1 4
2 1
2 2
2 3
SELECT message_id FROM TB A WHERE
(SELECT COUNT(1) FROM TB B WHERE B.list_id=1) >0 AND (SELECT COUNT(1) FROM TB B WHERE B.list_id=2) >0
AND (SELECT COUNT(1) FROM TB B WHERE B.list_id=3) >0
GROUP BY message_id HAVING COUNT(1)=3
select message_id from @message
where message_id in
(select message_id from @message
where list_id in(1,2,3)group by message_id having count(distinct list_id)=3)
group by message_id having count(distinct list_id)=3
where exists(select * from message_list_assoc where list_id = 1 and message_list_assoc.messageid = message.messageid)
and exists(select * from message_list_assoc where list_id = 2 and message_list_assoc.messageid = message.messageid)
and exists(select * from message_list_assoc where list_id = 3 and message_list_assoc.messageid = message.messageid)
and not exists(select * from message_list_assoc where (list_id > 3 or list_id < 1) and message_list_assoc.messageid = message.messageid)改一下,现在应该可以了
(message_id int,
list_id int
)
insert into #temp
select '1','1' union all select '1','2' union all select '1','3' union all select '1','4' union all select '2','1' union all select '2','2' union all select '2','3'
select * from #tempselect message_id
from #temp a
where exists(select * from #temp where list_id in(1,2,3) and message_id=a.message_id group by message_id)
group by message_id
having count(1)=3
-----------
2