如何将两个表的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我应该能够从原来的两个表中快速获取描述。
,创建一个视图,然后在其上创建索引:
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
让我也提供了一个选项2的选项。选项1真的是恶搞国际海事组织。选项1意味着根本没有FK约束。我还会在列上添加一个检查约束,以确保只有一列非空。 – aquinas
您可以使用JOIN为 – Dekel
编辑你的问题,并提供样本数据和预期的结果。很难想象你想要做什么。你的方法很好。你甚至可以创建一个索引视图。 –
都可以同时有效输入? – Hogan