2011-11-16 33 views
4

選擇我有兩個相關的表:TSQL從相關表格和條件

表1

Id 
----- 
1 
2 
3 

表2

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

我要選擇具有,例如IDS,既'汽車'和'摩托'。 在例子中我想只有編號= 1

回答

2

使用INTERSECT操作:

select id from table2 where feature = 'Car' 
intersect 
select id from table2 where feature = 'Moto' 
+0

我認爲你的意思是'table2'在第一個'SELECT'中。 – ean5533

+0

奇妙的這個相交運算符!謝謝! –

0

該選擇做兩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,因爲它確實是沒有必要的。

+0

使用'INTERSECT'可能比這更快的德里克的答案。 – ean5533

1

此:

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 

哪個查詢更有效取決於你有多少條記錄有兩個表中有多少匹配有。