我需要添加字段 ovr.riga ,这应该是许多人的第一个匹配,所以我创建一个子查询来获取应该考虑的 progressivo 列表,但是postresql抱怨
子查询返回多行
SELECT
ovr.progressivo,
ovr.art_codice,
ovr.descrizione1,
ovr.descrizione2,
ovr.riga
FROM ovr
WHERE ovr.progressivo = (
SELECT progressivo
FROM ovr
WHERE
ovr.art_codice ~~ '0034%'::text OR
ovr.art_codice ~~ '0035%'::text OR
ovr.art_codice ~~ '0036%'::text
group by progressivo
)
子查询单独运行
答案 0 :(得分:0)
只需将=
替换为in
:
where ovr.progressivo in (
如果你只想要(无论如何)第一个:
select distinct on (ovr.progressivo)
ovr.progressivo,
ovr.art_codice,
ovr.descrizione1,
ovr.descrizione2,
ovr.riga
from ovr
where ovr.progressivo in (
select progressivo
from ovr
where
ovr.art_codice ~~ '0034%'::text or
ovr.art_codice ~~ '0035%'::text or
ovr.art_codice ~~ '0036%'::text
group by progressivo
)
order by ovr.progressivo
如果您有一个标准,首先将其添加到order by
子句
答案 1 :(得分:0)
“as is”查询包含“where ovr.progressivo =(...)”,其中子查询产生多行。等于运算符无法计算值列表,但IN运算符可以。
尝试使用IN
SELECT
ovr.progressivo
, ovr.art_codice
, ovr.descrizione1
, ovr.descrizione2
, ovr.riga
FROM ovr
WHERE ovr.progressivo IN ( --<<<<<<< change = to IN
SELECT
progressivo
FROM ovr
WHERE ovr.art_codice -- '0034%'::text
OR ovr.art_codice -- '0035%'::text
OR ovr.art_codice -- '0036%'::text
GROUP BY
progressivo
)
;
如果这样可以解决错误,那么您需要决定所需的结果行,并使用ORDER BY和LIMIT 1来控制结果