1

我有一个包含 300,000 行 (1.6 GB) 的大型数据库。我需要将它们全部删除,除了具有以下功能的那些:

main_sec=118 
main_sec=Companies
type=SWOT

这是我准备的代码,但不知何故,它删除了表的所有行:

DELETE FROM `swots` 
WHERE (main_sec <> '118') OR
      (main_sec <> 'Companies') OR 
     (type <> 'SWOT');

请帮助我了解错误在哪里。

4

3 回答 3

2
DELETE FROM `swots` 
WHERE main_sec not in ('118', 'Companies')
and type <> 'SWOT'
于 2013-09-09T14:25:04.963 回答
1

在新表中插入要保留的行(假设它们少于剩余的行)会更快,例如:

INSERT INTO main_sec_new
SELECT
   *
FROM main_sec 
WHERE main_sec IN ('118','Companies')
and type = 'SWOT'

然后放下旧桌子

于 2013-09-09T14:27:19.077 回答
1

尝试这个:

DELETE FROM `swots` 
WHERE (main_sec not in ('118', 'Companies')) OR
      (type <> 'SWOT');

问题是它main_sec总是等于给定记录中的这两个值之一。因此,每条记录都满足where您版本中的条件。

于 2013-09-09T14:26:01.337 回答