SQL錯誤排查:子查詢返回的值不止一個。子查詢用作表示式時,這種情況是不允許的...
阿新 • • 發佈:2019-01-10
SELECT OrderID FROM dbo.Orders WHERE EmployeeID =(SELECT EmployeeID FROM dbo.Employees WHERE LastName LIKE N'D%');
訊息 512,級別 16,狀態 1,第 4 行子查詢返回的值不止一個。當子查詢跟隨在 =、!=、<、<=、>、>= 之後,或子查詢用作表示式時,這種情況是不允許的。出現這種結果的原因是SQL Server 2005 的返回結果分為Scalar(標量,可以理解單一值)和Set(結果集)“=”後面的查詢條件肯定只能是Scalar,所以當子查詢“(SELECT EmployeeID FROM dbo.Employees WHERE LastName LIKE N'D%')”返回多條記錄(Set,結果集)時,出現了上面那種情況。
正確的做法是用“in”代替“=”,用下面的查詢就可以出正確結果了
SELECT OrderID FROM dbo.Orders WHERE EmployeeID IN (SELECT EmployeeID FROM dbo.Employees WHERE LastName LIKE N'D%');
如果此錯誤出現的不是在WHERE中,那麼又如何解呢?可用“top 1”來解。但是查詢不出資料庫的所有資料。誰有更好的辦法呢?