【问题标题】:Need to update a table from the result of other table需要从其他表的结果更新一个表
【发布时间】:2021-09-02 10:52:44
【问题描述】:

我们有两个表,UsersHistory

Users 表有以下列

Users Active
A Y
B Y
C Y
X Y
Y Y
Z Y

History 表有以下列

users startdate enddate
A DD-MMM-YY DD-MMM-YY
A DD-MMM-YY DD-MMM-YY
B DD-MMM-YY DD-MMM-YY
C DD-MMM-YY DD-MMM-YY
B DD-MMM-YY DD-MMM-YY
A DD-MMM-YY DD-MMM-YY
X DD-MMM-YY DD-MMM-YY
Y DD-MMM-YY DD-MMM-YY

History 表中,我们使用以下查询查询自过去六个月以来活跃的用户

SELECT 
    users, 
    MAX(CAST(start_date) AS date) AS "start", 
    MAX(CAST(end_date) AS date) AS "end" 
FROM 
    history 
WHERE 
    start > 'DD-MMM-YYY' 
GROUP BY 
    users

这是检索以下详细信息

users start end
A DD-MMM-YY DD-MMM-YY
X DD-MMM-YY DD-MMM-YY
Y DD-MMM-YY DD-MMM-YY

现在基于此详细信息,我想更改 Users 表中的 Active 列,并将其从 Y 设置为 N,以用于未从第二个查询中检索到的用户。

输出应该是这样的

Users Active
A Y
B N
C N
X Y
Y Y
Z N

有人可以帮忙实现吗?

【问题讨论】:

    标签: sql oracle sql-update


    【解决方案1】:

    你可以使用NOT EXISTS

    UPDATE users u
       SET active = 'N'
     WHERE NOT EXISTS ( SELECT 1 
                          FROM history 
                         WHERE startdate >= SYSDATE - INTERVAL '6' MONTH
                           AND users = u.users)
    

    单个用户的不匹配记录被更新为非活动状态。 Demo

    【讨论】:

    • 您好,感谢您的回复,我试图在继续更新以验证它之前选择用户列表,但我什至能够选择我不想在那里的用户一种我可以在更新之前选择用户的方法,以便验证一次..
    • 不客气@RaahithyaAnik。我不能很好地理解你的问题。您能否通过编辑问题来举例说明。
    • 你好,是的,我试图在更新之前进行选择查询,但似乎选择的列表也有用户,理想情况下不应该按照我的要求,我不知道我是否在做选择查询中有问题,所以请您帮我选择查询,以首先交叉验证我稍后将使用您之前提供的查询更新的结果@Barbaros Özhan
    • 有人可以帮我解决这个问题吗?这对我们来说有点紧急.. 会有很大帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多