从两个表mysql的两列中选择不同的值



我有两张表,例如汽车和修理。在这两个表中,我都有"licensePlate"列。在表cars中,我的值为:0000 0001 0002 0003在表repair中,我的值为:0000 0002 0003。如何仅提取表cars中的值0001而不提取表repair中的值?我想我没有使用正确的"运算符"或类似的东西:

select car.licensePlate
from car, repair
where car.licensePlate (something) reparir.licensePlate;

您应该使用NOT EXISTSLEFT JOIN,如:

select c.licensePlate
from car c
where not exists (select 1 from repair r where c.licensePlate = r.licensePlate;

您特别应该不要使用NOT IN,因为如果子查询在任何行上返回NULL值,则它具有奇怪的语义(即行为怪异(。当这种情况发生时,外部查询将不返回任何行。

出于这个原因,我强烈建议使用NOT EXISTS而不是带有子查询的NOT IN

您可以使用not in运算符:

SELECT licensePlate
FROM   car
WHERE  licensePlate NOT IN (SELECT licensePlate
FROM   repair)

使用NOT IN运算符应该可以解决您的问题。它的工作方式是:

选择CAR.LICENSEPLATE其中CAR.licenseeplate不在(选择REPAIR.LICENSEPLATE FROM REPAIR(

当执行此查询时,它将被读取为:选择CAR.LICENSEPLATE其中CAR.LICNESEPLATE不在(0000000 20003(中

这是因为在由子查询组成的任何查询中,子查询都会首先执行,在这种情况下是SELECT REPAIR.LICENSEPLATE FROM REPAIR,并且子查询的结果会传递给主查询。这就是上面提到的问题的总结。

希望能有所帮助。干杯

最新更新