Tsql выбрать из связанной таблицы с условием AND - PullRequest
4 голосов
/ 16 ноября 2011

У меня есть две связанные таблицы:

Table1

Id
-----
1
2
3

Table2

Id     Feature
--------------
1      Car
1      Moto
1      Camper
2      Moto
2      Scooter
3      Apple

Я хочу выбрать идентификаторы, например, «Автомобиль» И «Мото». Так что в примере я хочу получить только Id = 1.

Ответы [ 3 ]

2 голосов
/ 16 ноября 2011

Используйте оператор INTERSECT:

select id from table2 where feature = 'Car'
intersect 
select id from table2 where feature = 'Moto'
1 голос
/ 16 ноября 2011

Это:

WITH    features AS
        (
        SELECT  feature
        FROM    (
                VALUES
                ('Car'),
                ('Moto')
                ) q (feature)
        )
SELECT  *
FROM    table1 t1
WHERE   NOT EXISTS
        (
        SELECT  feature
        FROM    features
        EXCEPT
        SELECT  feature
        FROM    table2 t2
        WHERE   t2.id = t1.id
        )

или это:

SELECT  *
FROM    table t1
WHERE   (
        SELECT  COUNT(*)
        FROM    table2 t2
        WHERE   t2.id = t1.id
                AND t2.feature IN ('Car', 'Moto')
        ) = 2

Какой запрос более эффективен, зависит от того, сколько записей у вас в обеих таблицах и сколько совпадений.

0 голосов
/ 16 ноября 2011

Этот выбор делает два LEFT OUTER JOIN с table2 (один на основе 'Car', а другой на 'Moto') и гарантирует, что каждый JOIN вернул результат. DISTINCT гарантирует, что вы получите каждый идентификатор только один раз.

SELECT DISTINCT t1.id
FROM table2 t2
LEFT OUTER JOIN table2 t2_2 ON t2.id = t2_2.id AND t2_2.feature = 'Moto'
WHERE t2.feature = 'Car'
AND t2_2.id IS NOT NULL

Редактировать: Удалено соединение с таблицей1, поскольку оно действительно не нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...