2016-12-06 54 views
0

我有兩個表:如何將兩個表的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

回答

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; 

在視圖上的索引自動熬夜最新當底層數據的變化 - 這是物化視圖「魔力」。這就像使用一張桌子一樣快。

3

如果只有一個可以在使用一個空的時間有效輸入。我會使用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

相關問題