【问题标题】:Left join inside left join左连接内左连接
【发布时间】:2019-10-18 07:59:37
【问题描述】:

我在从表中获取值时遇到问题。

我需要这样的东西

A.Id a1
  B.Id b1
     C.Id c1
  B.Id b2
     C.Id c2
     C.Id c3
     C.Id c4

表 A 和 B 连接在一起,表 B 和 C 也连接在一起。 表 A 可以具有表 B 中的一个/零或多个值。表 C 中的值也是如此。

我需要在表 B 上对表 A 执行左连接,并在表 B 上对表 C 执行左连接。

我尝试使用表 A 和 B 的左连接,但不知道如何在左连接中执行左连接。

这可能吗?它的语法是什么样的?

编辑: 数据看起来像这样

ZZN1  P1  NULL
ZZN1  P2  NAB1
ZZN2  P3  NAB2
ZZN2  P3  NAB3

【问题讨论】:

  • 向我们展示一些示例表数据和预期结果 - 全部为格式化文本,没有图像。也可以看看minimal reproducible example。
  • 你描述你“需要”什么没有意义。这看起来像带有缩进值的单行。如果那是你想要的那是你的表示层要做的。
  • 样本数据和期望的结果真的很有帮助。目前还不清楚哪些列用于连接。当B 中没有匹配项时,您是否需要来自C 的行,或者即使这是可能的,也不清楚。
  • @GordonLinoff 你是对的。将在新编辑中进行。我急着打字。

标签: sql sql-server database left-join sql-null


【解决方案1】:

无需嵌套左连接,您可以简单地将它们展平并让您的 RDMBS 处理逻辑。

示例架构:

a(id)
b(id, aid) -- aid is a foreign key to a(id)
c(id, bid) -- aid is a foreign key to b(id)

查询:

select a.id, b.id, c.id
from a
left join b on b.aid = a.id
left join c on c.bid = b.id

如果第一个左连接不成功,那么第三个也不能执行,因为连接列b.id 将是null。另一方面,如果第一个左连接成功,那么第三个左连接可能会成功,也可能不会成功,这取决于相关的bid 是否在c 中可用。

【讨论】:

  • 我认为这会奏效。没想到是这样的。我尝试了左连接和其中的另一个左连接。
【解决方案2】:
SELECT A.Name, B.Name , C.Name 
FROM A 
LEFT JOIN B ON A.id = B.id
LEFT JOIN C ON B.id = C.id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 2010-09-16
    • 2017-08-15
    • 2010-10-06
    相关资源
    最近更新 更多