【问题标题】:How to join and get 4 results如何加入并获得4个结果
【发布时间】:2017-05-17 22:31:28
【问题描述】:

我有两张桌子

A
artnr grp name
1 FlowerA NameA
2 FlowerB NameB
3 FlowerC NameC
4 FlowerD NameD

B
artnr eigenschap waarde
1 color Red
2 color Null
4 color Yellow
4 Height 30

如何获得 4 个带颜色的结果?

Select A.Artnr,
       A.grp,
       A.name,
       B.waarde
from A
left join B on B.Artnr = A.Artnr 
where B.Eigenschap = 'color'

我的问题是表 B 没有 artnr 3,Artnr 2 是空的(Is Null)没问题。当两个表中都不存在记录时,我遇到了问题。

我想要以下结果:

A left join b
artnr grp name   waarde
1 FlowerA NameA  red
2 FlowerB NameB  NULL
3 FlowerC NameC  NULL   -- Droptopp: I want to see this even not in table B
4 FlowerD NameD  yellow

我得到 3 行,缺少 artnr 3 的行,这是因为我认为它不在表 B 中。那么如何获得 4 行的结果,而 artnr 3 的行在列颜色中是一个空单元格?

【问题讨论】:

  • 您希望“两个表中都不存在”的记录会发生什么?什么是两个表中都不存在的记录?
  • @Droptopper,你的预期结果是什么......?
  • 预期结果
  • artnr 与两个表相同,因此在选择数据时使用别名,例如选择 A.Artnr 作为 aID,A.grp 作为 grp,A.name 作为名称,B.color 作为 bcolor 从 A 左连接 B关于 B.Artnr = A.Artnr
  • 我想要 4 个结果我希望 artnr 3 也能显示出来,即使它不在两个表中。这样我可以看到我想念的东西。我不希望表 B 填充表 A 中的所有记录并且颜色为空(为空)

标签: sql join left-join


【解决方案1】:

您的问题似乎是WHERE。本声明:

Select A.Artnr,
   A.grp,
   A.name,
   B.eigenschap,
   B.waarde
from A
left join B on B.Artnr = A.Artnr

将为文章 3 返回一行,即

3 FlowerC NameC NULL NULL

之后过滤@​​987654324@,这会从最终结果集中删除该行,因为eigenschapNULL。将该条件移至连接条件:

Select A.Artnr,
   A.grp,
   A.name,
   B.waarde
from A
left join B on B.Artnr = A.Artnr AND
B.eigenschap = 'color'

【讨论】:

    【解决方案2】:
    SELECT A.Artnr, A.grp, A.name, B.waarde
    FROM A 
    LEFT OUTER JOIN B 
    ON (A.artnr = B.artnr)
    

    What is the difference between "INNER JOIN" and "OUTER JOIN"?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-29
      • 2021-08-14
      • 2015-09-05
      • 2011-06-19
      • 1970-01-01
      • 2021-09-03
      • 2017-01-16
      • 1970-01-01
      相关资源
      最近更新 更多