繁体   English   中英

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

是相应的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 Server 2000中甚至都不准确,因为它们可能会被误解为交叉联接。 这甚至可能就是为什么要插入区别的原因(或者它可能与您的数据模型有关,而又不了解您无法告知的数据)。

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

非ANSI标准外部联接已于2000年弃用,2005年不再受支持。请参见https://msdn.microsoft.com/zh-cn/library/ms144262(​​v=sql.90).aspx用户仍可以将db_compat级别更改为暂时获得救济,但操作员已在2012年被彻底撤职,因此您别无选择。

修改查询以使用ANSI标准外部联接,它们将在当前版本和旧版本(包括2000)上运行。

第一件事是,“ Asterisk =为左联接,= Asterisk为右联接”,那么,或者您的SQL 2012查询不正确,或者您想更改第一个查询的联接。

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

此查询是根据您的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM