如何查询B表中无关联评论记录的A表数据?
获取B表无对应评论记录的A表数据
表结构
A表:
A_id name 1 apple 2 orange 3 sexy
B表:
B_id A_id comment 1 1 abcde
期望结果
A_id name 2 orange 3 sexy
以下是几种可行的MySQL查询语句:
方法1:LEFT JOIN + IS NULL
这是最直观常用的写法,通过左连接保留A表所有行,筛选B表无匹配的记录:
SELECT a.A_id, a.name FROM A a LEFT JOIN B b ON a.A_id = b.A_id WHERE b.A_id IS NULL;
逻辑说明:左连接会保留A表的每一行,若B表中没有对应A_id的记录,关联后b.A_id会为NULL,通过WHERE条件筛选出这些行即可得到目标结果。
方法2:NOT EXISTS
语义贴合需求,直接判断B表不存在对应记录:
SELECT a.A_id, a.name FROM A a WHERE NOT EXISTS ( SELECT 1 FROM B b WHERE b.A_id = a.A_id );
逻辑说明:子查询检查B表是否存在与当前A表行A_id匹配的记录,NOT EXISTS会筛选出所有无匹配的A表行。
方法3:NOT IN(需注意NULL值)
如果B表的A_id字段不存在NULL值,可使用此写法:
SELECT A_id, name FROM A WHERE A_id NOT IN ( SELECT A_id FROM B WHERE A_id IS NOT NULL );
注意:若B表的A_id包含NULL值,NOT IN会返回空结果,因此必须加上WHERE A_id IS NOT NULL过滤,或确认B表A_id无NULL值时使用。
内容的提问来源于stack exchange,提问作者dvb42a
相关产品推荐
相关产品推荐

