SQL Server 2000 加入查询到 SQL Server 2012

SQL Server 2000 join query to SQL Server 2012

我有以下 SQL Server 2000 查询:

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

对应的SQLServer 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 查询中是正确的 table。请指教

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

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

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

我相信您转换为正确的联接是正确的,但请检查两个查询的结果并确保它们返回相同的结果。然后尝试删除 distinct 并检查这些结果以确定是否仍然需要它。如果加入是为了摆脱cross joining的可能,可能就没有必要了,而且是一个昂贵的操作,所以如果能省掉,那是最好的。

首先是,“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