SQL仅在特定行上连接表

eat*_*hil 2 sql

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

Parameters  Values   Mammal
   a          1         
   b          3
   d         cat      Yes
   c          4
   d         dog      Yes
   e          3
   d         fish      No
   f          2
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一些使用Case的方法,但是表格变得非常奇怪,并且根据其长度重复加入表格.有什么建议?

第二个表有两列,它在自己的动物列上连接到值列,其中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
Run Code Online (Sandbox Code Playgroud)

Tar*_*ryn 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
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo

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

SQL连接的可视化解释