如何编写SQL查询获取Table1中不存在于Table2的全字段匹配行
实现Table1差集查询的SQL方案
现有数据表
Table1
| MarketID | Employee ID |
|---|---|
| 101 | 501 |
| 102 | 502 |
| 103 | 503 |
| 104 | 504 |
| 105 | 505 |
Table2
| MarketID | Employee ID |
|---|---|
| 101 | 501 |
| 102 | 502 |
| 103 | 504 |
| 106 | 505 |
| 107 | 507 |
预期输出结果
| MarketID | Employee ID |
|---|---|
| 103 | 503 |
| 104 | 504 |
| 105 | 505 |
可用查询语句
方案1:NOT EXISTS实现(全数据库兼容)
SELECT t1.MarketID, t1.`Employee ID` FROM Table1 t1 WHERE NOT EXISTS ( SELECT 1 FROM Table2 t2 WHERE t2.MarketID = t1.MarketID AND t2.`Employee ID` = t1.`Employee ID` );
方案2:左连接实现(全数据库兼容)
SELECT t1.MarketID, t1.`Employee ID` FROM Table1 t1 LEFT JOIN Table2 t2 ON t1.MarketID = t2.MarketID AND t1.`Employee ID` = t2.`Employee ID` WHERE t2.MarketID IS NULL;
方案3:EXCEPT实现(支持PostgreSQL、SQL Server等数据库)
SELECT MarketID, `Employee ID` FROM Table1 EXCEPT SELECT MarketID, `Employee ID` FROM Table2;
注意:字段名
Employee ID包含空格,不同数据库的包裹符略有区别,MySQL用反引号、PostgreSQL/SQL Server可用双引号、SQL Server也可用方括号,可根据实际使用的数据库调整。
内容的提问来源于stack exchange,提问作者rahul kumar
相关产品推荐
相关产品推荐

