我有两个表,例如汽车和维修站。
在两个表中,我都有“ licensePlate”列。
在表cars
中,我具有以下值:0000 0001 0002 0003
在表repair
中,我的值是:0000 0002 0003。
如何仅提取表cars
中的值0001而不能提取repair
中的值0001?
我认为我没有使用正确的“运算符”或类似的符号:
select car.licensePlate
from car, repair
where car.licensePlate (something) reparir.licensePlate;
答案 0 :(得分:1)
您应使用NOT EXISTS
或LEFT JOIN
,如下所示:
select c.licensePlate
from car c
where not exists (select 1 from repair r where c.licensePlate = r.licensePlate;
您特别应该不使用NOT IN
,因为如果子查询在 any <上返回NULL
值,则语义就很奇怪(即行为很怪异)。 / em>行。发生这种情况时,外部查询将不返回任何行。
因此,我强烈建议使用NOT EXISTS
而不是NOT IN
进行子查询。
答案 1 :(得分:0)
您可以使用not in
运算符:
SELECT licensePlate
FROM car
WHERE licensePlate NOT IN (SELECT licensePlate
FROM repair)
答案 2 :(得分:0)
使用NOT IN运算符可以解决您的问题。它将如何工作:
从CAR中选择CAR.LICENSEPLATE CAR.LICNESEPLATE不在其中(从REPAIR中选择REPAIR.LICENSEPLATE)
执行此查询时,将其读取为: 从汽车中选择许可 CAR.LICNESEPLATE NOT IN(0000,0002,0003)
这是因为在由子查询组成的任何查询中,首先执行子查询(在本例中为SELECT REPAIR.LICENSEPLATE FROM REPAIR),并将子查询的结果传递给主查询。以上总结了上面提到的查询。
希望有帮助。干杯!