【问题标题】:SQL Server 2012, LEFT JOIN becomes INNER JOINSQL Server 2012,LEFT JOIN 变为 INNER JOIN
【发布时间】:2012-11-20 10:00:45
【问题描述】:

我有一个factbudget 表,budget 表没有每个类别的值

Category   Budget
A           100
B            50

C在budget没有记录

查询似乎变成了 SQL Server 2012 上的内部联接。在我当前的位置,我在 SQL Server 2005 上使用了相同的语法,它仍然返回所有记录。

目前无法检查 SQL Server 2008。

SELECT distinct Category
FROM FactRide 
LEFT OUTER JOIN
   Budget ON FactRide.Category = Budget.Category
WHERE 
   (Budget.BudgetType = 'Ride' OR Budget.BudgetType IS NULL)

我错过了 SQL Server 2012 的变化吗?

问题是结果没有返回应有的类别 C。 当我在预算中添加 C 类和预算值“空”的行时,问题已“解决”。

但我想知道我是否应该要求供应商生成不同的 SQL 或注意 SQL 2012 服务包....

【问题讨论】:

  • 请提供说明问题的示例数据。我向你保证 join 的语义没有改变。
  • 这不是在抱怨不知道你的Category是哪个select吗?它可以是Fact.CategoryBudget.Category。这不是实际的查询吗?
  • 您的查询引用了JOIN 中名为Fact 的表,但FROM 中没有实际的Fact 表(或别名)。我也同意蕾妮。为避免混淆,请确保 SELECT 指定应从哪个表中提取 Category 列。
  • 是的,这不是原始查询,我更正了示例查询。原始查询只是有更多的文化特定名称...我试图简化它。
  • 你能调整sqlfiddle.com/#!6/2df66/5来显示问题吗?

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


【解决方案1】:

是的,自 SQL Server 2012 起,SQL Server 连接语法确实发生了变化,这让我措手不及。您可以在以下位置找到完整的详细信息:https://straightpathsql.com/archives/2012/11/sql-server-join-syntax-its/

【讨论】:

  • 那篇文章与原问题无关。 OP 使用“新”连接语法,并且从(至少)SQL Server 2000 开始可用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-28
  • 2015-01-10
  • 2016-10-31
  • 2023-03-17
  • 2015-03-03
  • 2018-07-10
  • 1970-01-01
相关资源
最近更新 更多