我正在寻找关于如何做到这一点的心态的一般回应...... 我有一个表,其中包含一个可能的参数列和一个充满可能值的列。我想将某种类型的所有参数连接到另一个表以进一步描述这些特定的行,但不要将该表连接到不包含特定值的所有其他行。它看起来像这样:
Parameters Values Mammal
a 1
b 3
d cat Yes
c 4
d dog Yes
e 3
d fish No
f 2
我已经尝试过使用Case的多种方法,但是表格变得非常奇怪,并且根据其长度重复加入表格。有什么建议吗?
第二个表有两列,它在自己的动物列上连接到值列,其中参数=“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
答案 0 :(得分:6)
听起来您当前的查询使用的是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
语法,那么有一篇很棒的文章:
答案 1 :(得分: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)上进行了测试。