You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写SQL查询所有未存在于另一张表中的成员?

修正SQL语句:查询未存在于另一张表中的成员

你的原SQL语句存在语法和逻辑错误:INNER JOIN只会返回两张表匹配的记录,而你把NOT IN错误地写在了连接条件里,且NOT IN后直接跟表名是不符合SQL语法的。

以下是几种可以实现需求的正确写法:

方法1:使用NOT EXISTS(推荐,性能更稳定)

SELECT a.id, 
       a.driver_name, 
       a.route 
FROM assigns a 
WHERE NOT EXISTS (
    SELECT 1 
    FROM vehicles v 
    WHERE v.assign_id = a.id
)

逻辑说明:子查询检查当前assigns记录的id是否在vehicles的assign_id中存在,若不存在则保留这条记录。

方法2:使用LEFT JOIN + IS NULL

SELECT a.id, 
       a.driver_name, 
       a.route 
FROM assigns a 
LEFT JOIN vehicles v ON a.id = v.assign_id
WHERE v.assign_id IS NULL

逻辑说明:LEFT JOIN会返回assigns的所有记录,当某条记录在vehicles中找不到匹配的assign_id时,v.assign_id会为NULL,通过筛选这个NULL值得到目标记录。

方法3:使用NOT IN(注意处理NULL值)

SELECT a.id, 
       a.driver_name, 
       a.route 
FROM assigns a 
WHERE a.id NOT IN (
    SELECT assign_id 
    FROM vehicles 
    WHERE assign_id IS NOT NULL
)

逻辑说明:先从vehicles中取出所有非空的assign_id,再筛选assigns中id不在这个列表里的记录。注意:如果vehicles的assign_id存在NULL值,直接用NOT IN会导致结果为空,所以必须加上WHERE assign_id IS NOT NULL。

内容的提问来源于stack exchange,提问作者FREEMAN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 21:27:12