[英]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.