2016-12-20 16 views
0

に挿入し、私は、テーブルの構造を有する:Updateまたはwhere句

Id(PK AI) | DataField1(Varchar) | DataField2(Varchar) | User_Id(int) 
1   | abc     | xyz     | 12 
2   | sdj     | mnu     | 09 
3   | yjf     | pku     | 17 
4   | anx     | vby     | 11 

私はこのテーブルを挿入または更新します。

User_Idのレコードが でない場合、DataField1='wer', DataField2='try' where User_Id = 11というデータを挿入したいとします。 User_Id=11のレコードが存在する場合は、レコードを更新します。

複数のクエリではなく1つのクエリが必要です。

User_Idは一意ではありません。 Idは自動増分のプライマリキーなので、そのフィールドには触れていません。

「重複キーの更新」に似たものが欲しいです。私の知る限り、このクエリには 'where condition'はありません。

+1

チェック 'あなたは一意のインデックスを持っていない場合に使用することはできませんDUPLICATE KEY UPDATE' – Rahul

+0

@Rahul ON INSERT。 – Barmar

+0

@ JohnPこれはユニークなインデックスが必要です。 – Barmar

答えて

1

あなたは単一のクエリが必要だと知っていますが、User_Id列が一意でない場合は不可能です。 2番目のクエリでWHERE句は、ユーザIDがすでにテーブルに存在しているときSELECTクエリが空の結果を返します

UPDATE yourTable 
SET DataField1='wer', DataField2='try' 
WHERE User_Id = 11; 

INSERT INTO yourTable (DataField1, DataField2, User_Id) 
SELECT 'wer', 'try', 11 
FROM dual 
WHERE NOT EXISTS (SELECT * FROM yourTable WHERE User_Id = 11) 

を:あなたは、次の2つのクエリでそれを行うことができます。

+0

ありがとうございます。これは私の仕事です。 – Francis

0
Try below code for update and insert If Id exists : 

IF EXISTS(SELECT 1 FROM yourTable WHERE User_Id = @User_Id) 
BEGIN 
    UPDATE yourTable SET DataField1='wer', DataField2='try' 
    WHERE User_Id = @User_Id 
END 
ELSE 
BEGIN 
    INSERT INTO yourTable (DataField1, DataField2, User_Id) 
    SELECT 'wer', 'try', @User_Id 
END