繁体   English   中英

如何从此SQL语句中删除嵌套选择

[英]How do I remove a nested select from this SQL statement

我有以下SQL:

SELECT * FROM Name 
INNER JOIN ( SELECT 2 AS item, NameInAddress.NameID as itemID, NameInAddress.AddressID
        FROM NameInAddress
        INNER JOIN Address ON Address.AddressID = NameInAddress.AddressID
        WHERE (Address.Country != 'UK')
) AS Items ON (Items.itemID = Name .Name ID)

我被要求删除嵌套的select并改用INNER JOINS,因为它可以提高性能,但是我很挣扎。

使用SQL Server 2008

有人可以帮忙吗?

谢谢!

您的查询不正确,因为您不在Items.itemID ,而是使用Items.itemID

我想这就是你的意思:

SELECT Name.*
FROM Name
INNER JOIN NameInAddress
ON Name.NameID = NameInAddress.NameID
INNER JOIN Address 
ON Address.AddressID = NameInAddress.AddressID
WHERE (Address.Country != 'UK')

编辑:查询的确切翻译将以SELECT Name.*, 2 as Item, NameInAddress.NameID, NameInAddress.AddressID

嵌套选择比联接慢是那些长期存在的神话之一。 这完全取决于嵌套选择的内容。 SQL只是一种声明性语言,用来告诉您要完成的工作,数据库会将其转换为完全不同的内容。 如果有好处的话,MSSQL和Oracle(我也怀疑其他主要引擎)都能够完美地将相关的子查询和嵌套的视图转换为联接(除非您做的事情很复杂,如果可能的话,很难用常规方法描述)。连接。

SELECT     2 AS Item, * 
FROM       Name 
INNER JOIN NameInAddress
ON         Name.NameID = NameInAddress.NameID
INNER JOIN Address 
ON         Address.AddressID = NameInAddress.AddressID
WHERE      Address.Country != 'UK'

PS:请勿使用“ *”。 这也将提高性能。 :)

暂无
暂无

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

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