SQL - JOIN TABLE A 和 TABLE B 以便每一行说明 TABLE 它来自 A、B 或两者

SQL - JOIN TABLE A AND TABLE B SO THAT EACH ROW STATES WHICH TABLE IT COMES FROM, A, B OR BOTH

你有两个tables A和B,两个tables有相同的列但不同的行,一些行在table A和B中都存在,一些行只有存在于 table A 或 B 中,但不能同时存在于两者中。 您如何加入两个 table 以便生成的 table 包含来自两个 table 的所有行和一个新列,该列说明每行的来源,table A , table 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  |
+----------------------+

我在一次采访中被问到这个问题,但我没有正确回答,所以现在我很好奇正确答案是什么。预先感谢您回答我的问题,一点点帮助。

您可以合并来自 table 的行(添加的列指示每行的来源)然后 group bygroup_concat(origin) 以检查该行是否存在于任一或两者 tables:

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

Fiddle

(假设一对(id, value)在每个table中不能出现超过一次)