子查询返回的值超过1。当子查询遵循> =或子查询用作表达式时,不允许这样做

时间:2017-01-06 04:14:20

标签: sql

子查询返回的值超过1个值。怎么解决这个问题?

SELECT top 1 address
FROM tblAdr A
WHERE A.pkey=
  (SELECT b.pkey FROM tblMachine b WHERE b.ADDRESS_PKEY IS NULL
  )

4 个答案:

答案 0 :(得分:2)

子查询(括号中的数量)返回多个pkey值,这是不允许的,因为需要单个标量值。如果您满意于检查pkey中的tblAdr是否与子查询中的任何值相匹配,那么您可以使用WHERE A.pkey IN (...),如下所示:

SELECT TOP 1 address
FROM tblAdr A
WHERE A.pkey IN (SELECT b.pkey FROM tblMachine b WHERE b.ADDRESS_PKEY IS NULL)

答案 1 :(得分:1)

=更改为IN

select top 1 address from tblAdr A where A.pkey in (select b.pkey from tblMachine b where b.ADDRESS_PKEY is null)

这应该可以解决错误,但是查询的逻辑可能存在缺陷。您只是在一行之后(select top 1),但是您没有定义应该首先选择哪一行(没有order by子句)。

答案 2 :(得分:0)

使用IN代替=,因为子查询会返回多个匹配的行。

SELECT top 1 address
FROM tblAdr A
WHERE A.pkey IN
  (SELECT b.pkey FROM tblMachine b WHERE b.ADDRESS_PKEY IS NULL
  );

此外,请始终使用排序依据的顶级查询。

答案 3 :(得分:0)

此子查询“从tblMachine b中选择b.pkey,其中b.ADDRESS_PKEY为空”返回多个值,您无法与“=”运算符进行比较。但是您希望此try in子句