我有一个问题,想要进行一个查询,如果字段存在,则该查询将更新,如果不存在,则插入新的查询。问题是 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。
这也尝试过,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';
最佳答案
正确的解决方案是重复 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/