如何将两个表的UNION用作另一个表中的列?

问题描述:

我有两个表:如何将两个表的UNION用作另一个表中的列?

  • 美国(亚利桑那州,加利福尼亚州,华盛顿州,等)
  • 类似的东西给各州,除了所有CHAR(3)的ID

我需要一个表需要在另一个表中引用这两个外键,其中任一个都可以是有效的输入。
我该怎么做?还是有更好的做法吗?

我目前的方法只是存储多达3的VCHAR,然后搜索其它两个表的视图。

“这个问题不是关于”union“关键字,更多的是关于如何在指向两个表的列上有一个外键,这是不可能的,因此,OP想知道什么是最佳实践做某事“就像”这样“。”
正如aquinas所说,这完全正确。

更多关于我想做
既然我无法弄清楚如何格式化此表什么是什么,我想用数据做了一个例子:

 Table 1 
------------------------ 
StateCodes Desc 
------------------------ 
AZ   Arizona 
CA   California 
NY   New York 
etc  etc 

     Table 2 
------------------------ 
Char3Codes Desc 
------------------------ 
JUR  Jurusalem 
ABP  A Black Panda 
QRM  QR Monument 
etc  etc 

     Table 3 
------------------------ 
ComboColumn No Desc Column 
------------------------ 
    AZ   
    CA   
    NY   
    JUR 
    ABP 
    QRM 

然后与Table3我应该能够从原来的两个表中快速获取描述。

+0

您可以使用JOIN为 – Dekel

+0

编辑你的问题,并提供样本数据和预期的结果。很难想象你想要做什么。你的方法很好。你甚至可以创建一个索引视图。 –

+0

都可以同时有效输入? – Hogan

,创建一个视图,然后在其上创建索引:

create view v_allcodes with shemabinding as 
    select StateCode as code, Description 
    from table1 
    union all 
    select Char3Code, Description 
    from table2; 

create index idx_v_allcodes_code_description on v_allcodes(code, description); 

然后,只需做:

select t3.*, c.description 
from table3 t3 join 
    v_allcodes c 
    on t3.combocode = c.code; 

在视图上的索引自动熬夜最新当底层数据的变化 - 这是物化视图“魔力”。这就像使用一张桌子一样快。

如果只有一个可以在使用一个空的时间有效输入。我会使用coalesce来做这样的连接,而不是使用联合。

SELECT COALESCE(J1.VALUE, J2.VALUE) as Lookup 
    FROM TABLE T 
    LEFT JOIN STATES J1 ON T.FKEY = J1.CODE 
    LEFT JOIN OTHERTABLE J2 ON T.FKEY = J2.CODE 

当然,你可以用两个键同样的事情(我认为这是更好的解决方案),这通过具有关注更好的分离,提高了您的设计:如果你想速度

SELECT COALESCE(J1.VALUE, J2.VALUE) as Lookup 
    FROM TABLE T 
    LEFT JOIN STATES J1 ON T.FKEY1 = J1.CODE 
    LEFT JOIN OTHERTABLE J2 ON T.FKEY2 = J2.CODE 
+0

让我也提供了一个选项2的选项。选项1真的是恶搞国际海事组织。选项1意味着根本没有FK约束。我还会在列上添加一个检查约束,以确保只有一列非空。 – aquinas