我已经阅读了至少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 |
+-----+-----+
答案 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
。