使用ON DUPLICATE KEY更新Mysql查询,删除不在值查询中的项目

时间:2012-11-22 10:32:50

标签: mysql

我有这张桌子:

ID  adv_nr  day item1 item2 item3
1   2       2   10    23    34
2   2       3   11    23    34
3   2       4   10    24    34
4   2       5   10    35    34
5   3       10  56    34    12

密钥设置在ID(Primairy)和adv_nr与day(UNIQUE)的组合。

如果item1或item2发生了变化,我会进行ON DUPLICATE KEY更新,但如果在第4天删除的情况下如何处理?我想删除该行或将其设置为NULL。 在查询中是否有一种方法可以删除(或UPDATE为NULL)具有adv_nr = 2但在查询值中不存在的值? 所以查询将如下所示:

INSERT INTO table  (`adv_nr`,`day`,`item1`,`item2`,`item3`)
    VALUES (2,2,10,24,34), (2,3,11,28,34), (2,4,10,35,34) ON DUPLICATE KEY UPDATE 
    Item1 = VALUES(item1),
    Item2 = VALUES(item2),
    Item3 = VALUES(item3);

如何删除(或UPDATE为NULL)ID为4的行?

2 个答案:

答案 0 :(得分:0)

为什么你想在一个陈述中扼杀一切。只需delete * from yourTable where adv_nr = 2; insert into ...

首先,我不认为你可能要求的是什么。其次,当你不是一步到位时,它就不容易出错。更容易维护等等......

不要让它变得比它需要的更复杂。

答案 1 :(得分:0)

您的示例似乎与您要求的不符。我想你是在问,“如果没有提交day = 4的值,那么就会忽略项目值。”您的示例查询包含第4天的值。

因此,假设您要求将任何没有VALUES条目的行置空,那么在单个查询中没有好办法。您可以使用TRIGGER在INSERT后执行某些逻辑。