【问题标题】:Delete using where not exists使用不存在的地方删除
【发布时间】:2015-01-23 13:59:55
【问题描述】:

我正在尝试删除主文件中存在的记录,其中帐号(由三个字段 mn_no、sb_no 和 dp_no 组成)不在交易表中。因为帐号可能在一个或多个事务表中,所以我需要测试它是否存在于所有事务表中。当我运行以下查询时,MS-SQL 在第 1 行附近返回一个不正确的语法错误。

DELETE
FROM SYACTFIL_SQL a
WHERE NOT EXISTS (
        SELECT b.mn_no
            ,b.sb_no
            ,b.dp_no
        FROM gltrxhst_sql b
        WHERE a.mn_no = b.mn_no
            AND a.sb_no = b.sb_no
            AND a.dp_no = b.dp_no
        )
    AND NOT EXISTS (
        SELECT b.mn_no
            ,b.sb_no
            ,b.dp_no
        FROM gltrxfil_sql b
        WHERE a.mn_no = b.mn_no
            AND a.sb_no = b.sb_no
            AND a.dp_no = b.dp_no
        )
    AND a.mn_no <> '00000000'

【问题讨论】:

    标签: sql-server sql-delete


    【解决方案1】:

    这里的语法不正确。执行以下操作:

    DELETE  a
    FROM    SYACTFIL_SQL a
    WHERE   NOT EXISTS ( SELECT b.mn_no ,
                                b.sb_no ,
                                b.dp_no
                         FROM   gltrxhst_sql b
                         WHERE  a.mn_no = b.mn_no
                                AND a.sb_no = b.sb_no
                                AND a.dp_no = b.dp_no )
            AND NOT EXISTS ( SELECT b.mn_no ,
                                    b.sb_no ,
                                    b.dp_no
                             FROM   gltrxfil_sql b
                             WHERE  a.mn_no = b.mn_no
                                    AND a.sb_no = b.sb_no
                                    AND a.dp_no = b.dp_no )
            AND a.mn_no <> '00000000'
    

    或者

    DELETE  FROM SYACTFIL_SQL
    WHERE   NOT EXISTS ( SELECT b.mn_no ,
                                b.sb_no ,
                                b.dp_no
                         FROM   gltrxhst_sql b
                         WHERE  SYACTFIL_SQL.mn_no = b.mn_no
                                AND SYACTFIL_SQL.sb_no = b.sb_no
                                AND SYACTFIL_SQL.dp_no = b.dp_no )
            AND NOT EXISTS ( SELECT b.mn_no ,
                                    b.sb_no ,
                                    b.dp_no
                             FROM   gltrxfil_sql b
                             WHERE  SYACTFIL_SQL.mn_no = b.mn_no
                                    AND SYACTFIL_SQL.sb_no = b.sb_no
                                    AND SYACTFIL_SQL.dp_no = b.dp_no )
            AND mn_no <> '00000000'
    

    【讨论】:

      猜你喜欢
      • 2019-01-08
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      • 2018-05-04
      • 1970-01-01
      • 2011-04-01
      • 2014-10-22
      • 1970-01-01
      相关资源
      最近更新 更多