我有2个mysql选择语句,假设这些是我的查询&他们的结果:
声明1:
从
中选择ID
返回此结果集:{1,2,3,4,5,6,7,8,9,10}
声明2:
从b
中选择ID
返回此结果集:{3,5,10}
我想编写一个查询,确定resultset1是否包含resultset2的所有记录。我认为需要一个简单的查询,任何建议???
答案 0 :(得分:3)
使用它:
select count( case when a.id = b.id then a.id end ) = count(b.id)
as is_a_containing_all_b
from b
left join a using(id)
答案 1 :(得分:0)
您可以使用in ( <subselect> )
和not in ( <subselect> )
条款来执行此操作。
select 'inset' , a.id as IN_SET
from a
where a.id in (select b.id from b)
union
select 'not inset' , a.id as IN_SET
from a
where a.id not in (select b.id from b)
答案 2 :(得分:0)
一种简单的方法是创建b LEFT JOIN a
并检查连接失败的是否存在任何行:
SELECT NOT EXISTS
(
SELECT b.id
FROM b
LEFT JOIN a
ON a.id = b.id
WHERE a.id IS NULL
) AS T1
结果:
1
测试数据:
CREATE TABLE a (id INT NOT NULL);
INSERT INTO a (id) VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
CREATE TABLE b (id INT NOT NULL);
INSERT INTO b (id) VALUES (3),(5),(10);