Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在表B的两列中的任意一列上连接ID的表A,在不匹配的列中返回值_Sql_Presto - Fatal编程技术网

Sql 在表B的两列中的任意一列上连接ID的表A,在不匹配的列中返回值

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 |

编辑:在预览中,表格看起来非常好,但我不确定我最后发布的问题中的表格为什么看起来不好

我想将两个表连接在一起,如下所示,在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
| 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 . . . 在大多数数据库中,我认为这会非常有效,因为联接可以优化。当然,它值得在您的系统上对您的数据进行测试。