如何在另一个表中使用两个表的UNION作为列?

时间:2016-12-06 21:36:13

标签: sql sql-server union

我有两张桌子:

  • 州(AZ,CA,WA等)
  • 类似于州的东西,除了所有char(3)ID

我需要一个表,需要在另一个表中使用外键引用这两个表,其中任何一个都可以是有效输入。
我怎样才能做到这一点?或者有更好的做法来做这样的事情吗?

我当前的方法只是存储最多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,我应该能够快速从原始的两个表中获取描述。

2 个答案:

答案 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;

当基础数据发生变化时,视图上的索引会自动保持最新状态 - 这是物化视图的“神奇”。然后就像使用表一样快。