2013-07-19 58 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

相关问题