2017-09-12 175 views
0

我有一個問題,想要創建一個查詢,如果字段存在,將會更新,如果沒有,則插入新的查詢。問題是,ID不是唯一的,所以我不能使用ON DUPLICATE KEY UPDATE如果數據存在UPDATE else INSERT SQL查詢 - 沒有外鍵

我試圖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不是唯一的,可以有許多與不同的meta_key-s相同的post_id。

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

在畫面看到
+2

用你正在使用的數據庫標記你的問題。 –

+2

SQL中沒有'IF'。你正在使用哪種DBMS產品? –

+1

你可以用MERGE – romulus001

回答

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

我注意到這兩個日期不同。那是故意的嗎?

+0

日期是故意的,我只是在考驗其是否正常工作,我沒有一個外鍵,有幾個imputs具有相同POST_ID,但不同的meta_key,所以我不能對重複KEY – Strahinja90bg

+0

使用@ Strahinja90bg 。 。 。當然可以。這就是獨特的索引。我不明白你爲什麼不斷重複這一點。 –

+0

@ Gordon Linoff感謝您的時間,我在原始問題中附上了兩張照片,以便您可以看到這個特定問題有什麼問題。 – Strahinja90bg