我有两张桌子:
我需要一个表,需要在另一个表中使用外键引用这两个表,其中任何一个都可以是有效输入。
我怎样才能做到这一点?或者有更好的做法来做这样的事情吗?
我当前的方法只是存储最多3个vChar,然后搜索另外两个表的视图。
"这个问题不是关于" union"关键字以及有关如何在指向TWO表的列上使用外键的更多信息。有些事情是不可能的。因此,OP想知道做某事的最佳做法是什么"喜欢" 。这#&34;
正如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 :(得分:3)
如果使用一列工作,一次只有一个可以有效输入。我使用coalesce进行这样的连接,而不是使用union。
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
答案 1 :(得分:1)
如果您想要速度,请创建一个视图,然后在其上创建索引:
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;
当基础数据发生变化时,视图上的索引会自动保持最新状态 - 这是物化视图的“神奇”。然后就像使用表一样快。