SQL Select 来自 N 个表的唯一外键
SQL Select unique foreignkey from N tables
我遇到了以下问题,想知道是否可以通过 Google BigQuery 中的查询来解决它。
收到此查询;
SELECT destination.Id, destination.SomeColumn,
(SELECT NewId FROM table1 where OldId = destination.ForeignKeyColumn) as ForeginKeyColumn,
-- some more things
FROM MyDestinationTable destination;
我有一个名为 MyDestinationTable 的 table,它有一个 ForeignKeyColumn,它有旧的外键 ID,所以我需要 select 那个 ForeignKeyColumn 和来自 table1 的新外键(table1 有新旧外键)。
好吧,这是我已经解决的问题的一部分,当我与多个 table 有关系时就会出现问题,例如 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中的一个table中,有这部分;
(SELECT NewId FROM table1 where OldId = destination.ForeignKeyColumn) as ForeginKeyColumn,
是否可以在 N table 中搜索 NewId 直到找到它(就在那个部分)?
从 table1 到 tableN
类似于 table1 中的 NewId?不,那么 table2 中的 NewId?不,那么 table3 中的 NewId?是的,将那个作为 ForeginKeyColumn,不要查看 table 的其余部分(同样,新外键将仅存在于 N table 中的一个 table 上) .
如果可能的话,知道怎么做吗?需要提到我对这种查询很糟糕。
此致!
我会建议多个 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
. . .
我遇到了以下问题,想知道是否可以通过 Google BigQuery 中的查询来解决它。
收到此查询;
SELECT destination.Id, destination.SomeColumn,
(SELECT NewId FROM table1 where OldId = destination.ForeignKeyColumn) as ForeginKeyColumn,
-- some more things
FROM MyDestinationTable destination;
我有一个名为 MyDestinationTable 的 table,它有一个 ForeignKeyColumn,它有旧的外键 ID,所以我需要 select 那个 ForeignKeyColumn 和来自 table1 的新外键(table1 有新旧外键)。
好吧,这是我已经解决的问题的一部分,当我与多个 table 有关系时就会出现问题,例如 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中的一个table中,有这部分;
(SELECT NewId FROM table1 where OldId = destination.ForeignKeyColumn) as ForeginKeyColumn,
是否可以在 N table 中搜索 NewId 直到找到它(就在那个部分)?
从 table1 到 tableN
类似于 table1 中的 NewId?不,那么 table2 中的 NewId?不,那么 table3 中的 NewId?是的,将那个作为 ForeginKeyColumn,不要查看 table 的其余部分(同样,新外键将仅存在于 N table 中的一个 table 上) .
如果可能的话,知道怎么做吗?需要提到我对这种查询很糟糕。
此致!
我会建议多个 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
. . .