SQL仅在特定行上连接表

时间:2012-09-27 22:14:02

标签: sql

我正在寻找关于如何做到这一点的心态的一般回应...... 我有一个表,其中包含一个可能的参数列和一个充满可能值的列。我想将某种类型的所有参数连接到另一个表以进一步描述这些特定的行,但不要将该表连接到不包含特定值的所有其他行。它看起来像这样:

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

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

请参阅SQL Fiddle with Demo

如果您需要帮助学习JOIN语法,那么有一篇很棒的文章:

A Visual Explanation of SQL Joins

答案 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)上进行了测试。