選擇我有兩個相關的表:TSQL從相關表格和條件
表1
Id
-----
1
2
3
表2
Id Feature
--------------
1 Car
1 Moto
1 Camper
2 Moto
2 Scooter
3 Apple
我要選擇具有,例如IDS,既'汽車'和'摩托'。 在例子中我想只有編號= 1
選擇我有兩個相關的表:TSQL從相關表格和條件
表1
Id
-----
1
2
3
表2
Id Feature
--------------
1 Car
1 Moto
1 Camper
2 Moto
2 Scooter
3 Apple
我要選擇具有,例如IDS,既'汽車'和'摩托'。 在例子中我想只有編號= 1
使用INTERSECT
操作:
select id from table2 where feature = 'Car'
intersect
select id from table2 where feature = 'Moto'
該選擇做兩LEFT OUTER JOIN
s到table2
(一個基於「汽車」,並根據「摩托」的除外),並確保每一個JOIN
返回結果。 DISTINCT
確保您只獲取一次每個ID。
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
編輯:刪除加入到Table 1,因爲它確實是沒有必要的。
使用'INTERSECT'可能比這更快的德里克的答案。 – ean5533
此:
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
哪個查詢更有效取決於你有多少條記錄有兩個表中有多少匹配有。
我認爲你的意思是'table2'在第一個'SELECT'中。 – ean5533
奇妙的這個相交運算符!謝謝! –