我有以下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