Select

從表1、表2中選擇行,然後根據ID進行選擇

  • November 26, 2018

我正在處理一個大型數據集,因此遇到了一些問題。

我有一個數據集,如:

表格1

   State    ID  Conditional_Value
    AZ       1         Yes
    AZ       2         Yes
    AZ       5         Yes

表 2

   State    ID  Conditional_Value
    AZ       1         No
    AZ       3         No 
    AZ       7         No

我需要這個返回的是

  State    ID  Conditional_Value
    AZ       1         Yes
    AZ       2         Yes
    AZ       3         No
    AZ       5         Yes
    AZ       7         No

如果表 2 中有重複的 ID,則從表 1 中獲取該 ID 的行並選擇它。

我試過了

   Select State, ID, Conditional_Value 
   From Table1
   Union
   Select State, ID, Conditional_Value
   From Table2
   Where Table2.ID not in (select Table1.ID from Table1)

但是對於我擁有的大型數據集,執行起來太昂貴了。

我已經查看了有關查找重複項並刪除它們然後將非重複項插入另一個表的問題,但我還需要比較這兩個單獨的表。

如果需要更多資訊,請告訴我。謝謝!

雖然您似乎已經滿意地解決了這個問題,但經典的解決方案是使用FULL OUTER JOIN

SELECT COALESCE(t1.State, t2.State) as State
     ,COALESCE(t1.ID, t2.ID) as ID
     ,COALESCE(t1.Conditional_Value, t2.Conditional_Value) as Conditional_Value 
 FROM Table1 t1
        FULL OUTER JOIN Table2 t2 ON (    t1.State = t2.State
                                      AND t1.ID = t2.ID)

注意:程式碼未經測試,並且我沒有專門使用 teradata,因此可能存在一些我無法預測的語法問題。但是,據我所知,基本命令和功能應該是正確的。

程式碼根據StateID值合併兩個表。這些COALESCE函式確保無論哪個表具有特定行的值,這就是將要使用的值。因為我們Table1首先看,如果兩者都有Table1Table2的值Conditional_ValueTable1則將使用 from 的值。

引用自:https://dba.stackexchange.com/questions/223462