MySQL查询多个删除值

时间:2019-02-28 00:13:07

标签: mysql sql

请帮助。我的眼睛发麻。我的身体虚弱。

尝试#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秒。)

再次失败。

有人到这为止吗? 您会以为会有手册或其他内容。

2 个答案:

答案 0 :(得分:1)

可以检查带有 const ns = Namespace.createFromConnectionString(connectionString); const client = ns.createQueueClient(queueName); const receiver = client.getReceiver(); receiver.receive(onMessageHandler, onErrorHandler, { autoComplete: false }); 条件的元组的值。您只是语法错误。

语法如下:

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') ) 的情况。但是,效率将随着列表中元组的数量而降低,并最终达到系统限制。要处理非常大的列表,您最好考虑使用可以简单地加入的临时表。

答案 1 :(得分:0)

问题在于,在您的WHERE子句中,您要求同时删除id是一个值的图片网址,同时是其他所有值< / strong>。

您需要对OR的每个值使用imageURL

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'),
)