2016-06-28 130 views
0

我有表「table_film」和列「film_cat」,如下刪除除某些標識以外的所有記錄?

film_cat

我想刪除film_cat除ID 4,9,114,131所有ID圖片(不包括在同一時間4號,也許,4,9, - ,4,114, - ,4,9,131,...)

我試過但沒有工作!

DELETE FROM `table_film` WHERE id NOT IN (SELECT * FROM table_film WHERE film_cat = '4' or film_cat='9' or film_cat='114' or film_cat='131') 

DELETE FROM table_film where film_cat NOT IN (4,9,114,131) 

DELETE FROM table_film WHERE film_cat != '4,9,114,131' 
+0

film_cat –

+0

的數據類型是什麼?考慮通過添加另一個關係,比如'table_film_categories'和多對一關係(許多'films'給任何給定的'category')來規範化表。 – mbaitoff

回答

0

試試這個;)

DELETE FROM table_film WHERE film_cat NOT REGEXP '4|9|114|131' 

DELETE FROM table_film WHERE film_cat NOT REGEXP '[[:<:]]4[[:>:]]|[[:<:]]9[[:>:]]|[[:<:]]114[[:>:]]|[[:<:]]131[[:>:]]' 

或者使用FIND_IN_SET

DELETE FROM table_film 
WHERE FIND_IN_SET('4', film_cat) = 0 
AND FIND_IN_SET('9', film_cat) = 0 
AND FIND_IN_SET('114', film_cat) = 0 
AND FIND_IN_SET('131', film_cat) = 0 
+0

非常感謝你,工作! –

3

這就是當你有一個非常,非常差的數據表示,會發生什麼。您應該使用連接表,film_categories,每個膠片和每個類別都有一行。

將多個ID存儲在一個列中是一個壞主意。爲什麼它不好?

  • 將多個值存儲在單個列中是不好的。
  • 將數字存儲爲字符串是不好的。
  • 有未申報的外鍵關係是不好的。
  • MySQL有糟糕的字符串操作功能。

所以,你應該修復數據模型。

現在,我們有時會被其他人的設計困難所困擾。這裏有一個方法,你可以在這種情況下使用:

DELETE FROM table_film 
    WHERE find_in_set(4, film_cat) > 0 AND 
      find_in_set(9, film_cat) > 0 AND 
      find_in_set(114, film_cat) > 0 AND 
      find_in_set(131, film_cat) > 0 ; 

注:AND手機可能要OR秒。關於確切的邏輯,問題還不清楚。

相關問題