根据另一个表的结果更新表

时间:2015-02-18 19:15:01

标签: sql oracle

我有两个表 - 一个是帐户表,另一个是上诉表。两者都由Account_Id加入。

帐户表具有唯一的person_code,account_id(一个person_code可以有多个account_ids,也可以有多个status_code),状态代码为1,2,3。

上诉表格有account_idhearing_date(每个account_id可以有多个听证日期)。我需要从上诉表中获得最大hearing_date小于01-JAN-2014,其中最大听证日期与帐户表status_code中的状态代码“1”相对应。

示例:

帐户表:

person_id: 1234     account_id: 57897      status_code: 1
person_id: 1234     account_id: 65098      status_code: 2
person_id: 4567     account_id: 90455      status_code: 2
person_id: 4567     account_id: 98567      status_code: 1

上诉表:

account_id: 57897     hearing_date: 12-FEB-2014
account_id: 65098     hearing_date: 22-JAN-2014
account_id: 90455     hearing_date: 22-JAN-2015
account_id: 98567     hearing_date: 22-FEB-2014

我需要做一个更新声明,以便上诉表中的最大hearing_datehearing_date是< 01-JAN-2014),其中account_id有{帐户表中的{1}} 1更新为另一个status_code

我真的很感激,如果有人可以指导我,因为我正在尝试案例陈述和子查询,而且我没有得到任何快速:(

1 个答案:

答案 0 :(得分:0)

我没有完全按照你的需要,但这里有一个粗略的想法:

update Accounts
set accounts_column = (
    select max(hearing_date)
    from Appeals
    where Appeals.Account_Id = Accounts.Account_Id /* <- the important part */
        and hearing_date < '20140101'
)
where status_code = 1