我有以下SELECT
语句。SQL Server选择别名与IN语句不起作用
SELECT t.ID,
t.SiteID,
t.SpareID,
t.SpareLocationID,
t.Qty,
t.IsDefault
FROM TrainingDB.dbo.LocationsPerSpare t
WHERE t.SpareID IN
(SELECT s.SpareID
FROM TrainingDB.dbo.LocationsPerSpare s
WHERE s.SpareLocationID = t.SpareLocationID
AND s.SpareID = t.SpareID
GROUP BY s.SpareID
HAVING COUNT(CONVERT(VARCHAR(36), s.SpareID)) > 2)
ORDER BY t.SpareID
如果我执行该脚本,它返回NULL
。但是,如果我删除如下所示的t.
别名,它将正常运行。
SELECT ID,
SiteID,
SpareID,
SpareLocationID,
Qty,
IsDefault
FROM TrainingDB.dbo.LocationsPerSpare
WHERE SpareID IN
(SELECT s.SpareID
FROM TrainingDB.dbo.LocationsPerSpare s
WHERE s.SpareLocationID = SpareLocationID
AND s.SpareID = SpareID
GROUP BY s.SpareID
HAVING COUNT(CONVERT(VARCHAR(36), s.SpareID)) > 2)
ORDER BY SpareID
我觉得这很奇怪。有任何想法吗?
此外,我会补充说,第二个查询工作的原因是's.SpareID = SpareID'本质上是'1 = 1'。 SpareLocationID也一样。当然他们等同。 – 2013-02-23 20:24:24
关闭。删除s.SpareLocationID = t.SpareLocationID的作品。感谢您的答复。令人费解的事情是,没有“t”。别名,它工作正常。 – 2013-02-23 20:28:49
谢谢Nathan。我更频繁地使用Oracle,并且我没有这些问题。就像你说的那样,别名不会暗示1 = 1。但那是有用的知道。 – 2013-02-23 20:31:57