Как понять, что один набор результатов является подмножеством другого в twomysql выбрать набор результатов? - PullRequest
2 голосов
/ 05 апреля 2010

У меня есть 2 оператора выбора mysql, предположим, что это мои запросы и их результат:

Заявление 1:

выберите идентификатор из

, который возвращает этот набор результатов: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

Заявление 2:

выберите идентификатор из b

, который возвращает этот набор результатов: {3, 5, 10}

Я хочу написать запрос, который определяет, содержит ли набор результатов1 все записи набора результатов2 или нет. Я думаю, что нужен простой запрос, любое предложение ???

Ответы [ 3 ]

3 голосов
/ 05 апреля 2010

используйте это:

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)
0 голосов
/ 05 апреля 2010

Простой способ сделать это - создать 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);
0 голосов
/ 05 апреля 2010

Вы можете использовать для этого предложения 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) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...