如何保留Table1全量数据并标记与Table2的重复项
问题描述
现有两张表:
Table 1
| id | type |
|---|---|
| x1 | p1 |
| x2 | p1 |
| x3 | g1 |
Table 2
| id | type |
|---|---|
| x1 | p1 |
| x2 | p1 |
需要执行SELECT查询,保留Table1的所有数据,同时新增一个duplicate列:若Table1中的数据在Table2中存在,标记为1;否则标记为0,预期结果如下:
预期结果
| id | type | duplicate |
|---|---|---|
| x1 | p1 | 1 |
| x2 | p1 | 1 |
| x3 | g1 | 0 |
解决方案
方法一:LEFT JOIN + CASE 语句
通过左连接Table2,根据连接结果是否为空判断是否重复:
SELECT t1.id, t1.type, CASE WHEN t2.id IS NOT NULL THEN 1 ELSE 0 END AS duplicate FROM Table1 t1 LEFT JOIN Table2 t2 ON t1.id = t2.id AND t1.type = t2.type;
方法二:EXISTS 子查询
用EXISTS子查询直接判断当前行是否在Table2中存在,大数据量下性能更优:
SELECT id, type, CASE WHEN EXISTS ( SELECT 1 FROM Table2 t2 WHERE t2.id = t1.id AND t2.type = t1.type ) THEN 1 ELSE 0 END AS duplicate FROM Table1 t1;
内容的提问来源于stack exchange,提问作者okletsplay okletsplay
相关产品推荐
相关产品推荐

