ORACLE SQL:如何更新另一列中的表?
我有两张桌子,Internamto和DOC_Admissa2。我想用名为DIASADMISSAO的表DOC_ADMISSAO2的相同值更新名为diasadmisso的internanto表中的一列,但有一些条件ORACLE SQL:如何更新另一列中的表?,sql,oracle,sql-update,dml,Sql,Oracle,Sql Update,Dml,我有两张桌子,Internamto和DOC_Admissa2。我想用名为DIASADMISSAO的表DOC_ADMISSAO2的相同值更新名为diasadmisso的internanto表中的一列,但有一些条件 update INTERNAMENTO a set a.DIASINTERNAMENTO = ( select b.DIASADMISSAO from DOC_ADMISSAO2 b where (a.EPISODIO = b.EPISODIO)
update INTERNAMENTO a
set a.DIASINTERNAMENTO = (
select b.DIASADMISSAO
from DOC_ADMISSAO2 b
where (a.EPISODIO = b.EPISODIO) AND (a.DATACRIACAO <= b.DATACRIACAO));
这给了我一个错误:
00000-单行子查询返回多行
有什么建议吗?错误很明显。子查询返回多行。您可以通过添加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)
);
这意味着在doc_admissa2中有多行用于Internamto.eposito的某些值,其中b.DataCriaco大于或等于a.DataCriaco 要找出是哪一种,请尝试以下未经测试的方法:
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;
您必须在where子句中添加一个标准,以始终获得一行,或者在子选择素中使用b.DIASADMISSAO的聚合,即MAXb.DIASADMISSAO除了Gordon刚才提供的之外,您的表可能会显示住院和入院的详细信息。。。对于不同的病人?您不需要where子句中的患者id相同吗?
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;