Mysql

如何刪除特定行

  • November 4, 2020

http://sqlfiddle.com/#!9/df6245

如何刪除品牌不等於 107 的所有行,例如上面的小提琴 GRPCD 44111 有 107,因此它不應刪除具有 GRPCD 44111 的兩行,但它將刪除 GRPCD 33111 的兩行,因為沒有品牌 107 值。請幫助 編輯 此查詢執行良好,有人可以給我更好的查詢。

DELETE FROM `products_cross` WHERE GRPCD NOT IN (SELECT GRPCD FROM products_cross WHERE brand=107) 

您需要對 products_cross 進行這樣的子查詢,以便 Mysql 有一個臨時表來選擇想要的 id

CREATE TABLE IF NOT EXISTS `products_cross` (
  `id` int(6) unsigned NOT NULL,
  `GRPCD` int(10) unsigned NOT NULL,
  `brand` int(5) NOT NULL,
  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
INSERT INTO `products_cross` (`id`, `GRPCD`, `brand`) VALUES
  ('1', '33111', '107'),
  ('2', '33111', '103'),
  ('3', '44111', '105'),
  ('4', '44111', '101');
SELECT * FROM products_cross
編號 | GRPCD | 品牌
-: | ----: | ----:
 1 | 33111 | 107
 2 | 33111 | 103
 3 | 44111 | 105
 4 | 44111 | 101
DELETE FROM `products_cross` 
WHERE GRPCD NOT IN (SELECT GRPCD FROM (SELECT * FROM products_cross ) pc WHERE brand=107) 
SELECT * FROM products_cross
編號 | GRPCD | 品牌
-: | ----: | ----:
 1 | 33111 | 107
 2 | 33111 | 103

db<>在這裡擺弄

引用自:https://dba.stackexchange.com/questions/279169