ORACLE SQL:如何更新基于另一列的表?

时间:2016-06-26 20:08:28

标签: sql oracle sql-update dml

所以,我有两个表,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));

它给了我一个错误:

  
      
  1. 00000 - “单行子查询返回多行”
  2.   

有什么建议吗?

2 个答案:

答案 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;