Sql 在表B的两列中的任意一列上连接ID的表A,在不匹配的列中返回值
编辑:在预览中,表格看起来非常好,但我不确定我最后发布的问题中的表格为什么看起来不好 我想将两个表连接在一起,如下所示,在A.id=B.source\u id或A.id=B.target\u id上连接到一个新的表C中 结果表C应具有列A.id,以及B.source_id或B.target_id-以不匹配的列值为准。有什么简单的方法可以做到这一点 我考虑过只复制表B,但反转源id和目标id,然后只匹配其中一列,但匹配大型数据集(数亿行),这似乎有点不切实际 我会喜欢你的想法Sql 在表B的两列中的任意一列上连接ID的表A,在不匹配的列中返回值,sql,presto,Sql,Presto,编辑:在预览中,表格看起来非常好,但我不确定我最后发布的问题中的表格为什么看起来不好 我想将两个表连接在一起,如下所示,在A.id=B.source\u id或A.id=B.target\u id上连接到一个新的表C中 结果表C应具有列A.id,以及B.source_id或B.target_id-以不匹配的列值为准。有什么简单的方法可以做到这一点 我考虑过只复制表B,但反转源id和目标id,然后只匹配其中一列,但匹配大型数据集(数亿行),这似乎有点不切实际 我会喜欢你的想法 Table A |
Table A
| id |
| ----|
| 123 |
| 456 |
| 789 |
Table B
| source_id | target_id | ... |
| ----------| --------- | ---- |
| 123 | 111 | misc |
| 222 | 456 | misc |
| 333 | 789 | misc |
Result: Table C
| A.id | new_id_column | ... |
| ---- | ------------- | ---- |
| 123 | 111 | misc |
| 456 | 222 | misc |
| 789 | 333 | misc |
倒桌子是个好主意。但您也可以使用两个
左连接
s和coalesce()
逻辑:
select a.id,
coalesce(bs.target_id, bt.source_id),
coaesce(bs.col1, bt.col1)
from a left join
b bs
on a.id = bs.source_id left join
b bt
on a.id = bt.target_id
哇,非常优雅。。。非常感谢。您是否知道哪一个更有效?我说的是“表B”的数亿行数据库potentially@PythonLearner . . . 在大多数数据库中,我认为这会非常有效,因为联接可以优化。当然,它值得在您的系统上对您的数据进行测试。