从具有相同列的两个表的联合中选择所有行

时间:2018-01-29 17:26:36

标签: mysql sql row jupyter

我已经阅读了至少10个关于这个主题的SO问题,但我无法弄清楚这一点。我在Jupyter工作,但我认为这不会有所作为。

我有两张桌子:

   Table A           Table B
+-----+-----+     +-----+-----+
|  x  |  y  |     |  x  |  y  |
+-----+-----+     +-----+-----+
|  1  |  2  |     |  1  |  3  |
|  2  |  3  |     |  4  |  6  |
|  3  |  4  |     |  7  |  9  |
|  4  |  5  |     |  10 |  12 |
|  5  |  6  |     +-----+-----+
+-----+-----+

我可以使用以下查询来获取这些表的并集:

SELECT * FROM (
    SELECT * FROM A UNION SELECT * FROM B
)

但是,我不确定如何返回此联合中具有重复x列的四行。我试过GROUP BY x HAVING COUNT(*) > 1,但这只返回2行。输出应为:

+-----+-----+
|  x  |  y  |
+-----+-----+
|  1  |  2  |
|  1  |  3  |
|  4  |  5  |
|  4  |  6  |
+-----+-----+

1 个答案:

答案 0 :(得分:2)

你似乎想要:

select a.*
from a
where exists (select 1 from b where b.x = a.x)
union all
select b.*
from b
where exists (select 1 from a where a.x = b.x);

union会导致删除重复项的开销。在您的情况下这似乎没有必要。因此,如果您不需要重复删除,请使用union all