MySQL JOIN查询异常:test表driverid未赋值时无法获取记录
解决test表未赋值driverid记录无法获取的问题
这事儿很常见——你当前用的JOIN是内连接(INNER JOIN),它只会返回两个表中能匹配test.driverid=drivers.driverid条件的记录。当test表的driverid没赋值(也就是NULL)时,根本找不到drivers表中对应的匹配项,自然这些记录就被过滤掉了。
解决方案:改用左连接(LEFT JOIN)
左连接的特性是保留左表(这里是test表)的所有记录,哪怕右表(drivers)里没有匹配的driverid,对应的drivers字段会显示为NULL,但test表的记录会完整保留下来。
修改后的查询语句如下:
SELECT * FROM test LEFT JOIN drivers ON test.driverid = drivers.driverid ORDER BY COALESCE(drivers.queno, 9999);
额外优化:处理NULL值的排序
如果test表中driverid为空的记录,drivers.queno会是NULL,默认排序时NULL可能会排在最前面或最后面(取决于数据库)。用COALESCE(drivers.queno, 9999)可以给这些NULL值一个默认排序值(比如9999),让它们排在所有有queno的记录后面,你可以根据需求调整这个默认值。
内容的提问来源于stack exchange,提问作者Nita
相关产品推荐
相关产品推荐

