2014-05-13 73 views
0

我有一个复杂的查询,其中包含ON DUPLICATE KEY Update。我只想插入最后一个值,如果没有“timestamp_dag”= 1420070400的行,如果有一行有这种情况我不想做任何事情。MySQL - 条件插入行中的一个查询与ON DUPLICATE KEY UPDATE

INSERT INTO data_prijzen_advertentie (
    `ID_advertentie`,`jaar`,`rijnr`,`status_prijs`,`datum_dag`,`timestamp_dag`, 
    `prijs_maand`,`prijs_week`,`prijs_midweek`,`prijs_langweekend`,`prijs_weekend`, 
    `prijs_dag`,`prijs_ochtend`,`prijs_middag` 
) 
VALUES 
    (100,2014,1,1,'12-05-2014',1399852800,0,100,0,75,0,0,0,0), 
    (100,2014,2,1,'23-05-2014',1400803200,0,75,0,101,0,0,0,0), 
    (100,2014,3,1,'30-05-2014',1401408000,0,100,0,75,0,0,0,0), 
    (100,2014,4,1,'01-01-2015',1420070400,0,0,0,0,0,0,0,0) 
ON DUPLICATE KEY UPDATE 
    status_prijs = VALUES(status_prijs), datum_dag = VALUES(datum_dag), 
    timestamp_dag = VALUES(timestamp_dag), prijs_maand = VALUES(prijs_maand), 
    prijs_week = VALUES(prijs_week), prijs_midweek = VALUES(prijs_midweek), 
    prijs_langweekend = VALUES(prijs_langweekend), prijs_weekend = VALUES(prijs_weekend), 
    prijs_dag = VALUES(prijs_dag), prijs_ochtend = VALUES(prijs_ochtend), 
    prijs_middag = VALUES(prijs_middag); 

回答

0

这是最好的,如果你能查询字符串创建.. 之前,但如果你不能处理这个问题,和你的特殊价值是静态的,你可以尝试这样的事: (我没有试图尚未虽然运行)

INSERT INTO data_prijzen_advertentie (
    `ID_advertentie`,`jaar`,`rijnr`,`status_prijs`,`datum_dag`,`timestamp_dag`, 
    `prijs_maand`,`prijs_week`,`prijs_midweek`,`prijs_langweekend`,`prijs_weekend`, 
    `prijs_dag`,`prijs_ochtend`,`prijs_middag` 
) 
VALUES 
    (100,2014,1,1,'12-05-2014',1399852800,0,100,0,75,0,0,0,0), 
    (100,2014,2,1,'23-05-2014',1400803200,0,75,0,101,0,0,0,0), 
    (100,2014,3,1,'30-05-2014',1401408000,0,100,0,75,0,0,0,0), 
    (100,2014,4,1,'01-01-2015',1420070400,0,0,0,0,0,0,0,0) 
ON DUPLICATE KEY UPDATE 
    status_prijs = IF(timestamp_dag<>1420070400, VALUES(status_prijs), status_prijs), 
    datum_dag = IF(timestamp_dag<>1420070400, VALUES(datum_dag), datum_dag), 
    timestamp_dag = IF(timestamp_dag<>1420070400, VALUES(timestamp_dag), timestamp_dag), 
    prijs_maand = IF(timestamp_dag<>1420070400, VALUES(prijs_maand), prijs_maand), 
    prijs_week = IF(timestamp_dag<>1420070400, VALUES(prijs_week), prijs_week), 
    prijs_midweek = IF(timestamp_dag<>1420070400, VALUES(prijs_midweek), prijs_midweek), 
    prijs_langweekend = IF(timestamp_dag<>1420070400, VALUES(prijs_langweekend), prijs_langweekend), 
    prijs_weekend = IF(timestamp_dag<>1420070400, VALUES(prijs_weekend), prijs_weekend), 
    prijs_dag = IF(timestamp_dag<>1420070400, VALUES(prijs_dag), prijs_dag), 
    prijs_ochtend = IF(timestamp_dag<>1420070400, VALUES(prijs_ochtend), prijs_ochtend), 
    prijs_middag = IF(timestamp_dag<>1420070400, VALUES(prijs_middag), prijs_middag); 
0

您只需如果timestamp_dag匹配条件触发它运行ON DUPLICATE KEY UPDATE ...部分。从MySQL docs

如果指定了对重复密钥更新,和行插入该 会引起一个唯一索引或主键的重复值,进行 更新旧行。

因此,假设您的表是以这种方式构建的,那么更新将会触发。您可以使用语法as described here添加UNIQUE索引。

CREATE UNIQUE INDEX ind_unique_timestamp_dag ON data_prijzen_advertentie (timestamp_dag) 
+0

如果添加行的其余部分的唯一索引更新(在重复键)也不能工作了.... –

+0

所以只是为了确认,你真正想要的'对重复密钥更新...'踢的部分?从你的问题看起来好像是否有重复,那么你不想用你试图插入的值来更新它。如果它不存在,你只想插入? –

+0

亚历克斯,我确实想要使用更新exept为具有1420070400值的行。 –

相关问题