Sql 如何在DB2中使用多个select从表中删除行
我只想删除下面语句返回的行,我该怎么做Sql 如何在DB2中使用多个select从表中删除行,sql,database,db2,delete-row,Sql,Database,Db2,Delete Row,我只想删除下面语句返回的行,我该怎么做 select usersernum,username,useremail from core.appuser where usersernum in ( select ch.usersernum from core.appusersession ch where ch.usersernum not in (
select usersernum,username,useremail
from core.appuser
where usersernum in (
select ch.usersernum
from core.appusersession ch
where ch.usersernum not in (
select usersernum
from (
select max(starttime) as maxstarttime
, usersernum
from core.appusersession vip
where vip.starttime >= '2011-01-01 00:00:00'
group by usersernum
)
)
group by usersernum
)
order by useremail
;
你可以用
从usersnum所在的core.appuser中删除
选择usersernum
来自core.appuser
usersernum在哪里
选择ch.usersernum
来自core.appusersession ch
其中ch.usersernum不在
从中选择usersernum
选择maxstarttime作为maxstarttime,usersernum
来自core.appusersession vip,其中vip.starttime>='2011-01-01 00:00:00'由usersernum组成的组
按usersernum分组
通过用户电子邮件订购;
您没有说明正在运行的DB2的平台或版本,但如果您使用的是DB2 9.7 for Linux、UNIX和Windows或更高版本,则可以使用super handy delete from select:
delete from (
select usersernum,username,useremail
from core.appuser
where usersernum in (
select ch.usersernum
from core.appusersession ch
where ch.usersernum not in (
select usersernum
from (
select max(starttime) as maxstarttime
, usersernum
from core.appusersession vip
where vip.starttime >= '2011-01-01 00:00:00'
group by usersernum
)
)
group by usersernum
)
order by useremail
);
有时候,退一步问问自己,用商业术语或日常语言,而不是SQL,这里的真正目标是什么是有帮助的 您的查询看起来有一堆不必要的层。看起来,您真正想要做的是删除任何非活动用户,即自2011年初以来未启动会话的用户
DELETE FROM core.appuser
WHERE usersernum NOT IN
( SELECT DISTINCT usersernum
FROM core.appusersession
WHERE starttime>='2011-01-01 00:00:00'
);
这不是更简单吗?不能有“*”号。我试图编辑它,但需要至少6个修改字符才能接受。你能用英语说明上面查询的目标吗?看起来这个查询可以简化。您的DB2运行在什么平台上?IBM i、LUW或z/OS