【问题标题】:SQL Inner Outer Join confusionSQL 内外部联接混淆
【发布时间】:2014-05-10 05:17:42
【问题描述】:

我对某个例子有点困惑。

我应该列出所有订单及其相应的详细信息。

这就是我正在做的:

SELECT *
    FROM Orders 
    LEFT OUTER JOIN [Order Details]
    ON Orders.OrderID=[Order Details].OrderID;

这给出了行数 = 2155。

现在的问题是,Orders Table 中的行数是 830……左外连接如何创建更多行?

根据左外连接的定义,从左表中取出所有行,并添加第二张表中的匹配记录。

我检查了订单详细信息表中的行数..即 2155。

为什么左外连接使用订单明细表中的所有行?

【问题讨论】:

  • @SyntaxLAMP: LEFT OUTER JOIN 和 LEFT JOIN 的意思完全一样。

标签: sql sql-server join left-join outer-join


【解决方案1】:

LEFT OUTER JOIN 将匹配右表中的所有记录,就像 INNER JOIN 一样。不同之处在于 LEFT JOIN 将保留左表中的记录,而右表中没有匹配项。

在这种情况下,[ORDER DETAILS] 中的所有记录在 ORDERS 中都有对应的条目,这就是为什么记录总数与 ORDER DETAILS 中的行数匹配的原因

根据表格描述,这正是您想要的。没有订单的订单详细信息将是一个更严重的问题。

【讨论】:

    【解决方案2】:

    LEFT JOIN 从您在连接左侧定义的表中获取所有详细信息,并从右侧表中匹配记录。

    如果不匹配,则右表的所有列都有 NULL 值。

    如果匹配,则返回右表中的所有匹配记录。如果您的关系是一对多(如您的情况),则意味着对于左表中的每条记录,右表可能返回多个记录。

    【讨论】:

    • 谢谢。我认为 LEFT OUTER JOIN 的定义非常严格,不允许 1-Many 的情况。
    • 匹配时所有连接都相同。它们在没有匹配的情况下有所不同。
    猜你喜欢
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多