2012-11-22 59 views
0

我有这个表: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与天(唯一的)组合。

如果item1或item2发生更改,我会进行ON DUPLICATE KEY更新,但如果在第4天取消时如何处理?我想删除该行或将其设置为NULL。 有没有在查询中删除(或更新为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); 

如何删除(或更新到NULL)行与ID 4?

回答

0

为什么你想要在一个语句中抽筋一切。只需delete * from yourTable where adv_nr = 2; insert into ...

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

只是不要让它比它需要更复杂。

0

你的例子似乎不符合你的要求。我想你是问,“如果日期= 4的值没有提交,则清空项目值。”您的示例查询包含第4天的值。

因此,假设您要求将任何没有VALUES条目的行都设为空值,否则在单个查询中没有办法做到这一点。您可以使用TRIGGER在插入后执行某些逻辑。