2013-07-19 78 views
0
Table: Car 
Columns: CarID, Value 

Table: Tyres 
Columns: TyreID, CarID, Brand 

我如何可以選擇所有Cars不具有相應的Tyre這是一定的Brand。在這種情況下,一輛汽車可能有許多不同的輪胎,每個輪胎都有不同的品牌。選擇不與另一個表中有一個特定值的所有項目

E.g.

分享幫助有4個輪胎,2×品牌A,1×品牌B,1×品牌C.
CAR2有3個輪胎,1×品牌A,2×品牌B.
的Car3有4個輪胎,3×品牌A,1 x品牌C.

我想找出沒有品牌C的單一輪胎的所有車輛的CarID。在這種情況下,結果爲Car2。

示例數據:

Car 
CarID Value 
-------------- 
1  Abc 
2  Def 
3  Geh 

Tyre 
TyreID CarID Brand 
---------------- 
1  1 Brand A 
2  1 Brand A 
3  1 Brand B 
4  1 Brand C 
5  2 Brand A 
6  2 Brand B 
7  2 Brand B 
8  3 Brand A 
9  3 Brand A 
10  3 Brand A 
11  3 Brand C 

Result 
ID  2 

回答

0

您可以使用NOT IN條款

SELECT CarID 
FROM Car 
WHERE CarID NOT IN (
    SELECT CarID 
    FROM Tyres 
    WHERE Brand='Brand C' 
) 
1

使用NOT EXISTS來代替NOT IN,因爲IN子句有2500行

SELECT CarID 
FROM Car 
WHERE NOT EXISTS (
    SELECT 'X' 
    FROM Tyres 
    WHERE Brand='Brand C' 
    and Tyres.carId = Car.carId 
) 
+0

是一個極限,' NOT EXISTS'通常是更有效的方式,但我認爲2500行的限制只是一個傳說。 –

+0

嗨,是真正的2.500!幾天前我寫了一個查詢,其中子查詢返回了很多結果(> 2500),並且...... BOOOOOM!附:在Oracle中是1.000。 –

+0

@Joe如果賽車有3 x品牌A和1 x品牌C.它仍然會返回該車配備的3 x品牌A輪胎的CarID。如果該車有一個或多個品牌爲C的輪胎,我不想返回單一結果。希望這是有道理的! – Jack

相關問題