2017-09-12 15 views
0

問題があり、フィールドが存在する場合は更新するクエリを1つ作成し、そうでない場合は新しいクエリを挿入します。問題は、IDが一意でないので、私は、私はIFが解決データが存在する場合はUPDATE、それ以外の場合はSQLクエリをINSERT - 外部キーなし

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

をEXISTSしようとした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') 

しかし運とを試みたON DUPLICATE KEY UPDATE

を使用傾けることです。どのように私は1つのクエリでこれを行うことができますか?

さらに、データベーステーブルの画像を添付して、何が起こっているかを確認します。 post_idは一意ではなく、異なるmeta_key-sを持つ多くの同じpost_idが存在する可能性があります。

enter image description here

enter image description here

これもON DUPLICATE KEYと、試みたが、 enter image description here

下の画像に見られるように、運これに

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

と私は私のテーブルに新しい行を持っています

+2

使用しているデータベースで質問にタグを付けます。 –

+2

SQLには「IF」はありません。どのDBMS製品を使用していますか? –

+1

あなたはMERGEでこれを行うことができます – romulus001

答えて

1

適切な解決策はです。。

まず、あなたは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'; 

私は2つの日付が異なっている注意してください。それは意図的なのでしょうか?

+0

日付が意図的であるa_horse_with_no_name イム使用してMySQLデータベース@ – Strahinja90bg

+0

上で使用するカント。 。 。もちろん可能です。これがユニークなインデックスの機能です。なぜあなたはそれを繰り返し続けているのか分かりません。 –

+0

@ Gordon Linoffあなたの時間をありがとう、私は元の質問で2つの写真を添付し​​て、この特定の問題の問題点を確認することができます。 – Strahinja90bg

関連する問題