在R语言中如何提取两个表中不同时存在的所有行?
提取两表非共有行的实现方案
你的需求是筛选出仅在表A中存在、不在表B中存在的customer_id记录,以下是不同场景下的实现方案:
方案1:左连接过滤(全数据库兼容)
所有主流关系型数据库都支持该写法,无兼容问题,是最通用的实现:
SELECT a.customer_id FROM table_a a LEFT JOIN table_b b ON a.customer_id = b.customer_id WHERE b.customer_id IS NULL;
逻辑:左连接会完整保留表A的所有记录,关联不到表B的记录对应b.customer_id会返回NULL,过滤这部分NULL值即可得到目标结果。
方案2:差集运算(支持PostgreSQL、SQL Server、SQLite)
如果使用的数据库支持EXCEPT集合运算,写法更简洁直观:
SELECT customer_id FROM table_a EXCEPT SELECT customer_id FROM table_b;
方案3:NOT IN 写法(仅适用表B无NULL值场景)
如果确认表B的customer_id字段没有NULL值,可以用该写法:
SELECT customer_id FROM table_a WHERE customer_id NOT IN ( SELECT customer_id FROM table_b );
注意:如果表B的
customer_id存在NULL值,该写法会返回空结果,这种场景请勿使用。
以上方案执行后都会得到你期望的输出:
customer_id 01 04 05
内容的提问来源于stack exchange,提问作者mgh
相关产品推荐
相关产品推荐

