[英]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
如果您在學習JOIN
語法方面需要幫助,則有一篇很棒的文章:
兩種選擇。
首先使用子查詢:
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.