MySQL查询多个删除值

问题描述 投票:0回答:2

请帮忙。我的眼睛麻木了。我的身体虚弱。

尝试#9432

取自这个答案MySQL delete multiple rows in one query conditions unique to each row

DELETE FROM `productimages` WHERE (`ID`,`imageURL`) 
    (179,'http://www.example.com/example1.jpg')
    (179,'http://www.example.com/example2.jpg')
    (179,'http://www.example.com/example3.jpg')
    (179,'http://www.example.com/example4.jpg')
    (179,'http://www.example.com/example5.jpg'))

失败。

#1064 - 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在'((179,'https:// ...)附近使用正确的语法。

引用我的存档,在02/14/96 - 尝试#387我发现你不能在一个查询中使用多个WHERE子句。我接下来试过了

尝试#837

DELETE FROM `productimages` (WHERE `productID` = 179 AND `imageURL` = 'http://www.example.com/example1.jpg') 
(AND `productID` = 179 AND `imageURL` = 'http://www.example.com/example2.jpg')
(AND `productID` = 179 AND `imageURL` = 'http://www.example.com/example3.jpg')
(AND `productID` = 179 AND `imageURL` = 'http://www.example.com/example4.jpg')
(AND `productID` = 179 AND `imageURL` = 'http://www.example.com/example5.jpg') 
(AND `productID` = 179 AND `imageURL` = 'http://www.example.com/example6.jpg')

#1064 - 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在'附近使用正确的语法'(WHERE'productID'= 179 AND'imageURL'='https:// ...

最近的尝试,我最接近的:

尝试#10473

DELETE FROM `productimages` 
WHERE `productID` = 179 
AND `imageURL` = 'http://www.example.com/example1.jpg' 
AND `imageURL` = 'http://www.example.com/example2.jpg' 
AND `imageURL` = 'http://www.example.com/example3.jpg' 
AND `imageURL` = 'http://www.example.com/example4.jpg' 
AND `imageURL` = 'http://www.example.com/example5.jpg' 
AND `imageURL` = 'http://www.example.com/example6.jpg'

无法形容的快乐。成功查询。

仔细看看......

0行受影响。 (查询耗时0.0128秒。)

再一次,失败了。

有没有人得到这么远呢?你认为会有手册或其他东西。

mysql sql
2个回答
1
投票

可以使用IN条件检查元组的值。你只是有语法错误。

语法如下:

DELETE FROM `productimages` 
WHERE (`productID`,`imageURL`) IN (
    (179,'http://www.example.com/example1.jpg'),
    (179,'http://www.example.com/example2.jpg'),
    (179,'http://www.example.com/example3.jpg'),
    (179,'http://www.example.com/example4.jpg'),
    (179,'http://www.example.com/example5.jpg')
)

这是一种非常灵活的过滤记录的方法,适用于元组中有几个不同的IDs的情况。但是,效率会随着列表中元组的数量而减少,并最终达到系统限制。要处理非常大的列表,最好考虑使用您可以简单加入的临时表。


0
投票

问题是在你的WHERE子句中你要求删除id为一个值的位置,而图像url是同时所有其他值。

你需要做的是使用ORimageURL的每个值:

DELETE FROM `productimages` WHERE `productID` = 179 AND (
  `imageURL` = 'http://www.example.com/example1.jpg' 
  OR `imageURL` = 'http://www.example.com/example2.jpg' 
  OR `imageURL` = 'http://www.example.com/example3.jpg' 
  OR `imageURL` = 'http://www.example.com/example4.jpg' 
  OR `imageURL` = 'http://www.example.com/example5.jpg' 
  OR `imageURL` = 'http://www.example.com/example6.jpg'
)

您还可以使用IN运算符:

DELETE FROM `productimages` 
WHERE `productID` = 179 AND `imageURL` IN (
  'http://www.example.com/example1.jpg', 
  'http://www.example.com/example2.jpg', 
  'http://www.example.com/example3.jpg', 
  ...
)

另外:你的第一个不工作的原因是你缺少一个括号和逗号。

DELETE FROM `productimages` WHERE (`ID`,`imageURL`) (
  (179,'http://www.example.com/example1.jpg'),
  (179,'http://www.example.com/example2.jpg'),
  (179,'http://www.example.com/example3.jpg'),
  (179,'http://www.example.com/example4.jpg'),
  (179,'http://www.example.com/example5.jpg'),
)
© www.soinside.com 2019 - 2024. All rights reserved.