mysql - 如果数据存在 UPDATE else INSERT SQL 查询 - 无外键

标签 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

最佳答案

正确的解决方案是重复 key 更新

首先,您需要一个唯一的 key ,例如 post_id, meta_key:

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

然后您可以使用重复 key 更新:

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';

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

关于mysql - 如果数据存在 UPDATE else INSERT SQL 查询 - 无外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46173911/

相关文章:

mysql - 如何在同一查询中执行连续的 SELECTS

MySQL左连接使用单行

随页面滚动的 CSS 子菜单

3 个表上的 MySql 查询未返回所有行

mysql - 按最大 ID 和点数对用户进行排名,但(排名错误)

mysql - SQL 不同的多个查询合并

mysql - 跨列计算不同的值

sql - Oracle 连接运算符

css - 使用 CSS 将样式/格式从一个 WordPress 小部件复制到另一个小部件

wordpress - 如何更改 WordPress "Add Media"弹出窗口?