【问题标题】:SQL Server 2000 join query to SQL Server 2012SQL Server 2000 连接查询到 SQL Server 2012
【发布时间】:2016-03-25 09:09:30
【问题描述】:

我有以下 SQL Server 2000 查询:

select distinct 
    m.[Index], m.part as [Part No] 
from 
    Ctable c, MTable m 
where 
    m.part *= c.part

这是对应的 SQL Server 2012 查询吗?

select distinct 
    m.[Index], m.part as [Part No] 
from 
    Ctable c 
right join  
    MTable m on m.part = c.part

所以基本上 Asterisk= 是左连接而 =Asterisk 是右连接?由于 MTable 是 2012 查询中的正确表,因此我必须对上述查询进行右连接。请指教。

【问题讨论】:

  • 你能改进你的标题吗?使其提供问题的摘要,并且不要在标题中包含标签。
  • 确定我编辑了标题
  • 这与其说是 SQL 2000 与 SQL 2012 的区别,不如说是 ANSI JOIN 语法的不同。我不熟悉 *==* 语法的细微差别而不查找它,但是您的第二个查询是“当前”连接语法,据我所知,它适用于任何可追溯到 2000 年的 SQL Server。更多信息请看这里:stackoverflow.com/questions/1599050/…
  • 这是非常古老的左右连接语法。该连接语法已被 ANSI-89 弃用,不再受支持。大多数人倾向于做左连接并以这种方式思考。您的右连接似乎是正确的,或者您可以通过将 MTable 设置为 CTable 的 from 和 left 连接来将其移动到左连接。

标签: sql sql-server sql-server-2012 sql-server-2000


【解决方案1】:

非 ANSI 标准外连接在 2000 年被弃用,并在 2005 年被取消支持。请参阅https://msdn.microsoft.com/en-us/library/ms144262(v=sql.90).aspx 用户仍然可以更改 db_compat 级别以获得暂时的缓解,但运算符在 2012 年被完全删除,因此您别无选择。

修改您的查询以使用 ANSI 标准外连接,它们将适用于当前和旧版本,包括 2000。

【讨论】:

    【解决方案2】:

    首先恭喜你摆脱了那些旧的连接,它们在 SQL Server 2000 中甚至不准确,因为它们可能被误解为交叉连接。这甚至可能是为什么要放入 distinct(或者它可能与您的数据模型有关,但不了解您拥有的数据,我无法分辨)。

    我相信您对正确联接的转换是正确的,但请检查两个查询的结果并确保它们返回相同的结果。然后尝试删除 distinct 并检查这些结果以确定是否仍然需要它。如果是为了消除交叉连接的可能性而添加的,则可能不再需要,并且这是一项昂贵的操作,所以如果可以省略它,那就最好了。

    【讨论】:

      【解决方案3】:

      首先,“Asterisk= 是左连接,=Asterisk 是右连接”,然后,或者您的 SQL 2012 查询不正确,或者您想更改第一个查询的连接。

      好吧,如果您想将查询移至 SQL 2012,则需要根据新的 SQL 标准重新编写此查询...在我看来,您可以尝试...

      此查询是根据您的 SQL 查询 2005

      SELECT DISTINCT(m.[index]), m.part AS "Part No"
      FROM
      Ctable AS C
      OUTER LEFT JOIN
      Mtable as M ON
      m.part = c.part
      

      此查询与您的问题有关

      SELECT DISTINCT(m.[index]), m.part AS "Part No"
      FROM
      Ctable AS C
      OUTER RIGHT JOIN
      Mtable as M ON
      m.part = c.part
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-13
        • 2011-11-20
        • 1970-01-01
        • 1970-01-01
        • 2014-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多