2012-09-27 24 views
2

我正在尋找關於如何執行此操作的思路的一般響應... 我有一張表,其中包含可能的參數列和充滿可能值的列。我想將某種類型的所有參數連接到另一個表中,以便對這些特定行進行進一步描述,但不能將該表連接到不包含特定值的所有其他行。它應該是這樣的:僅在特定行上的SQL連接表

Parameters Values Mammal 
    a   1   
    b   3 
    d   cat  Yes 
    c   4 
    d   dog  Yes 
    e   3 
    d   fish  No 
    f   2 

我用案例嘗試了多種方法,但該表只是變得非常奇怪,有依賴於它的長度被連接的表的重複。有什麼建議麼?

第二個表格有兩列,它在其自己的動物列上加入值列,其中參數=「d」。當參數等於其他時,它完全不顯示。任何建議將不勝感激! (我使用緩存的SQL,如果你需要知道,我寧願有技術的,雖然一般解釋,它可以幫助更多。)

編輯:對不起,這裏會是兩個獨立的表:

 Table 1:         Table 2: 

Parameters Values       Animal  Mammal 
    a  1         cat   yes 
    b  3         dog   yes 
    d  cat        snake  no 
    c  4        fish   no 
    d  dog        rat   yes 
    e  3        hamster  yes 
    d  fish 
    f  2 
+2

是上表中的第一個或第二個表還是預期的輸出。我已經多次重讀您的問題,我無法弄清楚。你能否澄清你的表格結構是什麼以及你期望的輸出是什麼。 –

+1

請發佈您的兩個分離表的數據的一些例子,並預期結果 –

回答

5

這聽起來像您當前的查詢使用的是INNER JOIN,它只包含兩個表中匹配的記錄。您需要使用LEFT JOIN,它將生成table1的所有記錄以及table2中的匹配記錄。如果沒有從table1匹配,則缺少的一側將等於空:

select t1.parameters, 
    t1.value, 
    case when t2.mammal is null then '' else t2.mammal end Mammal 
from table1 t1 
left join table2 t2 
    on t1.value = t2.animal 

SQL Fiddle with Demo

如果您需要幫助學習JOIN語法有一個偉大的文章:

A Visual Explanation of SQL Joins

1

有兩個選項。

首先使用子查詢:

select [parameters], [values], 
    (select mammal from t2 where t2.animal = t1.[values]) as mammal 
from t1 

其次使用左連接。

select [parameters], [values], t2.mammal 
from t1 
left join t2 on t1.[values] = t2.animal 

另一個答案使用左連接,但跳過另一個答案提供的空替換。

注意這僅在MS SQL Server(T-SQL)上進行了測試。