我有两个CARS
和DRIVERS
的mySql表,其属性为licenseNumber
作为外键。
查找没有车的司机姓名的查询是什么?
我在想:
SELECT DISTINCT D.name
FROM drivers D, cars C
WHERE
D.licenseNumber = C.licenseNumber AND
D.licenseNumber NOT IN (SELECT licenseNumber FROM cars)
但这不会返回任何东西 我有一种感觉,我正在过度思考它 有帮助吗?
答案 0 :(得分:6)
SELECT D.name
FROM drivers D
WHERE NOT EXISTS(SELECT * FROM cars c
WHERE D.licenseNumber = C.licenseNumber)
答案 1 :(得分:3)
使用LEFT JOIN:
SELECT DISTINCT D.name
FROM drivers D
LEFT JOIN cars C ON D.licenseNumber = C.licenseNumber
WHERE C.SOMECOLUMNTHATCANNOTBENULL IS NULL
虽然你可能只是做
SELECT DISTINCT D.name FROM drivers D WHERE D.licenseNumber is NULL
但这完全取决于你如何构建数据!
[编辑:LEFT JOIN的工作原理如下:它从左边提到的列中获取所有行 - 在这种情况下为驱动程序 - 并且每次尝试匹配汽车(使用ON后的条件)。如果没有找到汽车,则无论如何都会返回该驱动程序的行,通常应该来自汽车的列设置为NULL。 (如果为单个驱动程序找到多个汽车,则返回多行)。]
答案 2 :(得分:2)
任何行都不可能匹配该查询(如果licenseNumber不在cars表中,cars.licenseNumber = drivers.licenseNumber怎么样?)。
SELECT DISTINCT name FROM drivers WHERE licenseNumber NOT IN (SELECT licenseNumber FROM cars)
答案 3 :(得分:0)
SELECT DISTINCT D.name, c.id
我添加了汽车ID,所以我可以找到什么驾驶员没有汽车(c.id为空)
FROM drivers D LEFT JOIN cars C
ON D.licenseNumber = C.licenseNumber WHERE c.id IS NULL