gpt4 book ai didi

sql - 从表中删除列在另一个表中不存在的行

转载 作者:行者123 更新时间:2023-12-01 12:34:52 24 4
gpt4 key购买 nike

我有这个 SQL 查询,如果用户 30 天没有登录(上次登录日期位于 MOMUSER 表中),它会从 USERPREF 表中删除用户的首选项,但是,它不会验证用户是否仍然存在于 MOMUSER 中。我该如何更改它,以便如果 USERPREF.CUSER 不存在于 MOMUSER.CODE 中,那么在这种情况下 USERPREF 行也会被删除,因为它们没有上次登录日期?

    DELETE USERPREF FROM USERPREF
INNER JOIN MOMUSER ON MOMUSER.CODE = USERPREF.CUSER
WHERE MOMUSER.LOG_START < GETDATE()-30

最佳答案

更改为外部 连接,反转条件(以便匹配您想要保留 的用户)并将其移动到连接中,然后使用 IS NULL 删除行没有连接:

DELETE USERPREF
FROM USERPREF
LEFT JOIN MOMUSER ON MOMUSER.CODE = USERPREF.CUSER
AND MOMUSER.LOG_START >= GETDATE()-30
WHERE MOMUSER.LOG_START IS NULL

回想一下,当连接未命中时,外部连接会返回所有空值。通过将日期条件移动到联接中,您可以执行它但不需要需要联接的行。 where 子句过滤掉所有包含您想要保留的数据类型的行 - 只留下您想要删除的那些。

关于sql - 从表中删除列在另一个表中不存在的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30609879/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com