所以,我有两个表,INTERNAMENTO和DOC_ADMISSAO2。我想更新名为DIASINTERNAMENTO的表NATIONALMENTO中的列,其中包含表DOC_ADMISSAO2的相同值,称为DIASADMISSAO,具有一些条件..
update INTERNAMENTO a
set a.DIASINTERNAMENTO = (
select b.DIASADMISSAO
from DOC_ADMISSAO2 b
where (a.EPISODIO = b.EPISODIO) AND (a.DATACRIACAO <= b.DATACRIACAO));
它给了我一个错误:
- 00000 - “单行子查询返回多行”
醇>
有什么建议吗?
答案 0 :(得分:2)
错误很明显。子查询返回多行。您可以通过添加and rownum = 1
或添加聚合函数来获取一行:
update INTERNAMENTO a
set DIASINTERNAMENTO = (
select max(b.DIASADMISSAO)
from DOC_ADMISSAO2 b
where (a.EPISODIO = b.EPISODIO) AND (a.DATACRIACAO <= b.DATACRIACAO)
);
如果您根据DISASMISSAO
想要获得EPISODIO
的{{1}}的最新值,那么您可以使用DATACRIACAO
:
keep
答案 1 :(得分:0)
这意味着doc_admissao2中有多行internamento.episodio,其中b.datacriacao大于或等于a.datacriacao。
要找出哪些,请尝试这样的(未经测试):
SELECT a.episodio, count(*)
FROM internamento a JOIN doc_admissao2 b ON a.episodio = b.episodio
WHERE a.DATACRIACAO <= b.DATACRIACAO
GROUP BY a.episodio
HAVING count(*) > 1;