我对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命令只删除整个表。
请协助。
答案 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 ...
等等......有了这个,只会删除与子查询中返回的记录匹配的记录。