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 by
和 group_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
(假设一对(id, value)在每个table中不能出现超过一次)
你有两个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 by
和 group_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
(假设一对(id, value)在每个table中不能出现超过一次)