簡體   English   中英

SQL僅在特定行上聯接表

[英]SQL joining tables only on specific rows

我正在尋找有關如何執行此操作的一般性響應...我有一個表,該表的列中充滿可能的參數,而列中充滿可能的值。 我想將某種類型的所有參數連接到另一個表,以提供對那些特定行的進一步描述,但是不要將該表與不包含特定值的所有其他行連接。 它看起來像這樣:

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

我已經使用Case嘗試了多種方法,但是表變得非常奇怪,並且根據表的長度重復連接表。 有什么建議么?

第二個表有兩列,它在自己的動物列上連接到values列,其中parameter =“ d” 當參數等於其他任何值時,它根本不會顯示。 任何建議將不勝感激! (如果您需要知道的話,我正在使用Cache 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

聽起來您當前的查詢使用的是INNER JOIN ,它將僅包括兩個表中匹配的記錄。 您需要使用LEFT JOIN ,它將產生table1所有記錄以及table2的匹配記錄。 如果沒有來自table1的匹配項,則缺少的那一側等於null:

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語法方面需要幫助,則有一篇很棒的文章:

SQL連接的可視化解釋

兩種選擇。

首先使用子查詢:

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)上進行了測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM