删除除细节之外的所有行

时间:2013-09-09 14:23:53

标签: mysql sql sql-delete

我有一个包含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');

请帮我理解错误的位置。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

试试这个:

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

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

答案 2 :(得分:1)

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

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

然后放下旧桌子