如何获取INNER JOIN查询结果的反向数据集?
获取表A中不在表B禁售列表里的数据
首先明确你的表结构和现有数据:
item_serial_no (表A) | forbidden_item_serial_no (表B) -------------- | -------------- 1 | 1 2 | 3 3 | 5 4 | 7 5 6 7
你之前用内连接(INNER JOIN)得到的是两张表中编号匹配的结果(1、3、5、7),现在需要的是表A中所有不在表B禁售列表里的编号,可以用以下几种简单的实现方式:
方法1:使用NOT IN
这种写法最直观,直接筛选表A中编号不在表B禁售列表里的记录:
SELECT A.item_serial_no FROM A WHERE A.item_serial_no NOT IN (SELECT forbidden_item_serial_no FROM B)
方法2:使用LEFT JOIN + IS NULL
通过左连接保留表A的所有记录,然后筛选出表B中没有匹配的(也就是B字段为NULL的)记录:
SELECT A.item_serial_no FROM A LEFT JOIN B ON A.item_serial_no = B.forbidden_item_serial_no WHERE B.forbidden_item_serial_no IS NULL
方法3:使用NOT EXISTS
这种写法逻辑是“筛选表A中不存在于表B禁售列表的记录”,大数据量下性能表现通常不错:
SELECT A.item_serial_no FROM A WHERE NOT EXISTS ( SELECT 1 FROM B WHERE B.forbidden_item_serial_no = A.item_serial_no )
这三种方法都能得到你想要的结果:
result query ------------ 2 4 6
内容的提问来源于stack exchange,提问作者lyborko
相关产品推荐
相关产品推荐

