SQL - 从数据库中删除选定的行

时间:2015-08-20 16:40:01

标签: sql oracle

我对SQL很陌生,而且我在从表格中删除选定的行时遇到问题。

我编写了一个从表中选择所需行的查询,但是当我尝试执行DELETE FROM table_name WHERE EXISTS时,它会删除数据库中的所有行。

这是我的完整查询:

DELETE FROM USR_PREF WHERE EXISTS (
  SELECT *
    FROM USR_PREF
    WHERE USR_PREF.USR_ID = 1
      AND ((USR_PREF.SRV NOT IN (SELECT SEC_ENTITY_FOR_USR_ACTION_VIEW.ENTITYT_ID
          FROM SEC_ENTITY_FOR_USR_ACTION_VIEW
          WHERE SEC_ENTITY_FOR_USR_ACTION_VIEW.USR_ID = 1
            AND SEC_ENTITY_FOR_USR_ACTION_VIEW.ENTITYTYP_CODE = 2
            AND USR_PREF.DEVICE IS NULL)

      OR (USR_PREF.DEVICE NOT IN (SELECT SEC_ENTITY_FOR_USR_ACTION_VIEW.ENTITYT_ID
          FROM SEC_ENTITY_FOR_USR_ACTION_VIEW
          WHERE SEC_ENTITY_FOR_USR_ACTION_VIEW.USR_ID = 1
            AND SEC_ENTITY_FOR_USR_ACTION_VIEW.ENTITYTYP_CODE = 3)))))

select查询返回所需的行,但DELETE命令只删除整个表。

请协助。

1 个答案:

答案 0 :(得分:1)

你的where子句WHERE EXISTS (SOME QUERY)是问题所在。您基本上是在“如果此子查询返回一个结果,则删除所有内容”。

你需要更明确。也许是这样的事情:

DELETE FROM USR_PREF
WHERE USR_FIELD IN (
    SELECT USR_FIELD
    FROM USR_PREF
    WHERE USR_PREF_T.USER_ID=1
        AND ((USR_PREF.SRV NOT IN ...

等等......有了这个,只会删除与子查询中返回的记录匹配的记录。