如何理解一个结果集是twomysql选择结果集中另一个的子集?

时间:2010-04-05 08:27:01

标签: mysql select

我有2个mysql选择语句,假设这些是我的查询&他们的结果:

声明1:

  

中选择ID

返回此结果集:{1,2,3,4,5,6,7,8,9,10}

声明2:

  

从b

中选择ID

返回此结果集:{3,5,10}

我想编写一个查询,确定resultset1是否包含resultset2的所有记录。我认为需要一个简单的查询,任何建议???

3 个答案:

答案 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);