在简单查询中用作表达式的子查询返回的多行?

时间:2017-01-22 18:58:32

标签: postgresql

此查询:

SELECT "Nume", "Prenume" FROM public."Personal"
WHERE "Cod_angajat"=(SELECT "Cod_angajat" FROM public."Consultati");

生成此错误:

ERROR:  more than one row returned by a subquery used as an expression
********** Error **********

ERROR: more than one row returned by a subquery used as an expression
SQL state: 21000

同一个数据库中有两个表。因此,我要杀了我的笔记本电脑。是因为查询将返回相同的值两次左右?

1 个答案:

答案 0 :(得分:1)

WHERE something = something_else部分要求somethingsomething_else必须是同一类型的奇异值。 SQL允许您使用子查询替换something_else,但此子查询仍必须返回与something相同类型的奇异值。

这意味着您的子查询必须返回包含一个字段的一行。

让我重复一遍:您的子查询必须只返回一行,并且该行必须包含一个且只包含一个字段。零行不会做;两行或更多行不会这样做;两个或两个以上的领域不会这样做;你只需要一行,而且只需要一个字段。

错误消息非常清楚地表明您的子查询返回多行。有时候错误信息是含糊不清的,所以人们会来堆栈溢出来问他们的意思;这不是其中之一。

事实上,您的查询没有任何过滤器(没有WHERE子句),所以 它会返回表格中的所有行。

这显然不起作用。

您需要重新创建子查询,以便它只返回一行。