您有兩個表 A 和 B,兩個表具有相同的列但不同的行,有些行存在于表 A 和 B 中,有些行只存在于表 A 或 B 中,但不是兩者都存在。如何連接兩個表,以便生成的表包含兩個表中的所有行和一個新列,該列說明每行來自表 A、表 B 或兩者。
例子:
Table A
------------
| id | value |
------------
| 1 | 10 |
| 2 | 20 |
------------
Table B
------------
| id | value |
------------
| 1 | 10 |
| 3 | 30 |
------------
EXPECTED RESULT
----------------------
| id | value | origin |
----------------------
| 2 | 20 | A |
| 3 | 30 | B |
| 1 | 10 | BOTH |
----------------------
我在面試時被問到這個問題,但我沒有正確回答,所以現在我很好奇正確答案是什么。提前感謝您回答我的問題,每一點都有幫助。
uj5u.com熱心網友回復:
您可以合并兩個表中的行(添加一列指示每行的來源),然后group by檢查group_concat(origin)該行是否存在于一個或兩個表中:
select id, value,
case group_concat(origin order by origin)
when 'A' then 'A'
when 'B' then 'B'
when 'A,B' then 'BOTH'
end as origin from
(select *, 'A' as origin from A
union all
select *, 'B' as origin from B) t
group by id, value
小提琴
(假設一對 (id, value) 在每個表中不能出現多次)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/427750.html
上一篇:根據列值百分位過濾資料框行
下一篇:非規范化表上的SQL查詢
