如果数据存在UPDATE,则INSERT SQL查询 - 无外键

时间:2017-09-12 10:22:14

标签: mysql sql wordpress

我遇到了问题,想要制作一个如果字段存在则会更新的查询,如果不存在则插入新的查询。问题是id不是唯一的,所以我不能使用ON DUPLICATE KEY UPDATE

我尝试过IF EXISTS解决方案

   IF EXISTS (select * from wordpress.wp_4_postmeta where post_id=3466 and meta_key='_job_expires') 
THEN
   update wp_4_postmeta set meta_value='2017-06-25' where post_id=3466 and meta_key='_job_expires'  
ELSE
   insert into wordpress.wp_4_postmeta (post_id,meta_key,meta_value) values (3466,'_job_expires','2017-09-25')

并尝试了ROWCOUNT

UPDATE wordpress.wp_4_postmeta
SET meta_value='01-01-2685' 
WHERE  post_id=3471
IF @@ROWCOUNT = 0 
      INSERT INTO wordpress.wp_4_postmeta (post_id,meta_key,meta_value) 
      VALUES (3471,'_job_expires','2017-09-25')

但没有运气。我如何在一个查询中执行此操作?

我还附加数据库表的图片,看看发生了什么。 post_id不是唯一的,可能有很多相同的post_id与不同的meta_key-s。

enter image description here

enter image description here

这也是尝试过,ON DUPLICATE KEY但没有运气

insert into wordpress.wp_4_postmeta (post_id, meta_key, meta_value) 
    values (3466, '_job_expires', '2011-06-25')
    on duplicate key update meta_value='2011-06-25';  

有了这个,我的表中只有新行,如下图所示 enter image description here

1 个答案:

答案 0 :(得分:1)

正确的解决方案是on duplicate key update

首先,您需要一个唯一的密钥post_id, meta_key

create unique index unq_postmeta_post_metakey on wordpress.wp_4_postmeta(post_id, meta_key);

然后您可以使用on duplicate key update

insert into wordpress.wp_4_postmeta (post_id, meta_key, meta_value) 
    values (3466, '_job_expires', '2017-09-25')
    on duplicate key update meta_value='2017-06-25';

我注意到两个日期不同。这是故意的吗?