0

我有这张桌子:

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)。

如果第 1 项或第 2 项发生变化,我会进行一次重复密钥更新,但如果第 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 的行?

4

2 回答 2

0

您的示例似乎与您的要求不符。我想您是在问,“如果 day=4 的值未提交,则将项目值清空。” 您的示例查询包括第 4 天的值。

因此,假设您要求清空任何没有 VALUES 条目的行,那么在单个查询中没有好的方法可以做到这一点。您可能会使用触发器在插入后执行某些逻辑。

于 2012-11-22T11:14:47.863 回答
0

为什么要在一个语句中压缩所有内容。只是delete * from yourTable where adv_nr = 2; insert into ...

首先,我认为这不可能是您所要求的。其次,当您不一步完成所有操作时,就不容易出错。更容易维护等等...

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

于 2012-11-22T11:09:39.983 回答