Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在DB2中使用多个select从表中删除行_Sql_Database_Db2_Delete Row - Fatal编程技术网

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