sql - 如何比较两个表并在sql中检索匹配和不匹配的数据?
问题描述
我有两个具有不同列名的表,并且大多数值是相同的。我想要另一个表中匹配和不匹配的数据。
***
src-table
--------------------------------------------------------------------------------
eid | ename | email | country
--------------------------------------------------------------------------------
1 as as@gmail.com india
2 bs bs@gmail.com usa
3 cs cs@gmail.com usa
4 ds ds@gmail.com india
--------------------------------------------------------------------------------
tgt_table
--------------------------------------------------------------------------------
eid | ename | email | country
--------------------------------------------------------------------------------
1 as as@gmail.com india
2 bs b@gmail.com india
3 cs cs@gmail.com usa
4 ds d@gmail.com india
--------------------------------------------------------------------------------
expected output for matched_data
--------------------------------------------------------------------------------
src_coloumnname | src_data | tgt_colomnname | tgt_data
--------------------------------------------------------------------------------
eid 1 eid 1
eid 2 eid 2
eid 3 eid 3
eid 4 eid 4
ename as ename as
ename bs ename bs
ename cs ename cs
ename ds ename ds
email as@gmail.com email as@gmail.com
email cs@gmail.com email cs@gmail.com
country india country india
country usa country usa
country india country india
----------------------------------------------------------------------------
***
- 同样无与伦比的记录我怎么能做到这一点?有人可以帮助我吗?
解决方案
可以一次使用一列来完成:
SELECT 'eid' AS match_column, l.eid AS src_value, r.eid AS tgt_value, CASE WHEN l.eid = r.eid THEN 'match' ELSE 'no match' END AS result
FROM table1 AS l
INNER JOIN table2 AS r ON l.eid = r.eid
UNION ALL
SELECT 'ename', l.ename, r.ename, CASE WHEN l.ename = r.ename THEN 'match' ELSE 'no match' END
FROM table1 AS l
INNER JOIN table2 AS r ON l.eid = r.eid
UNION ALL
SELECT 'email', l.email, r.email, CASE WHEN l.email = r.email THEN 'match' ELSE 'no match' END
FROM table1 AS l
INNER JOIN table2 AS r ON l.eid = r.eid
UNION ALL
SELECT 'country', l.country, r.country, CASE WHEN l.country = r.country THEN 'match' ELSE 'no match' END
FROM table1 AS l
INNER JOIN table2 AS r ON l.eid = r.eid
它匹配行匹配的列。它不检查任一表中缺少的行。
推荐阅读
- javascript - 使用 jQuery 切换?
- vba - 从 Internet 页面的下拉列表中选择
- php - 分别打印会话数组数据以供进一步使用
- apache - 将 .htaccess 转换为 IIS web.config
- visual-studio - Visual Studio 安装项目 - 如何避免重复条目?
- c# - 如何在检查特定属性的可枚举列表中搜索重复项
- sql - 返回 postgresql 中的行数
- python-3.x - 在第一列是周末日期的数据框中删除行
- python - 当只有输入发生变化时,多次使用同一个 TensorFlow Session 有什么缺点吗?
- eclipse - 如何将功能分支的更改合并到 Eclipse 中的主分支?