SQL 从 N 个表中选择唯一的外键
Posted
技术标签:
【中文标题】SQL 从 N 个表中选择唯一的外键【英文标题】:SQL Select unique foreignkey from N tables 【发布时间】:2020-07-25 00:13:24 【问题描述】:我遇到了以下问题,想知道是否可以通过 Google BigQuery 中的查询来解决。
收到此查询;
SELECT destination.Id, destination.SomeColumn,
(SELECT NewId FROM table1 where OldId = destination.ForeignKeyColumn) as ForeginKeyColumn,
-- some more things
FROM MyDestinationTable destination;
我有一个名为 MyDestinationTable 的表,其 ForeignKeyColumn 具有旧外键 id,因此我需要从 table1 中选择具有新外键的 ForeignKeyColumn(table1 具有新旧外键)。
嗯,这是我已经解决的问题的一部分,当我与多个表有关系时,问题就出现了,比如 ForeignKeyColumn 与 table1 或 table2 或 tableN 有关系,即;
row 1: destination.ForeignKeyColumn may have a reference ONLY in table1
row 2: destination.ForeignKeyColumn may have a reference ONLY in table3
row 3: destination.ForeignKeyColumn may have a reference ONLY in table10
外键可能仅存在于 N_tables 的一个表中,具有此部分;
(SELECT NewId FROM table1 where OldId = destination.ForeignKeyColumn) as ForeginKeyColumn,
是否可以在 N 个表中搜索 NewId 直到找到它(仅在该部分中)?
从table1到tableN
table1 中有类似 NewId 的东西吗?不,那么 table2 中的 NewId 呢?不,那么 table3 中的 NewId 呢?是的,将其作为 ForeginKeyColumn 并不要查看其余的表(同样,新的外键仅存在于 N 个表中的一个表上)。
如果有可能对如何做有任何想法吗?需要提一下,我在这类查询上做得很差。
问候!
【问题讨论】:
【参考方案1】:我建议多个left join
s 和coalesce()
:
select d.*, coalesce(t1.newid, t2.newid, . . . )
from MyDestinationTable d left join
table1 t1
on t1.oldid = d.ForeignKeyColumn left join
table1 t2
on t2.oldid = d.ForeignKeyColumn left join
. . .
【讨论】:
COALESCE 完全奏效了我不必使用循环和更复杂的代码来执行 SP/Function,我对您的示例进行了一些调整,但完全让我走上了正轨!以上是关于SQL 从 N 个表中选择唯一的外键的主要内容,如果未能解决你的问题,请参考以下文章