子查询返回的值超过1个值。怎么解决这个问题?
SELECT top 1 address
FROM tblAdr A
WHERE A.pkey=
(SELECT b.pkey FROM tblMachine b WHERE b.ADDRESS_PKEY IS NULL
)
答案 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子句