SQL错误排查 子查询返回的值不止一个 子查询用作表达式时,这种情况是不允许的

               

 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”来解。但是查询不出数据库的所有数据。谁有更好的办法呢?

           

你可能感兴趣的:(SQL错误排查 子查询返回的值不止一个 子查询用作表达式时,这种情况是不允许的)