2016-10-19 5 views
0

DATAINSERT IDの値が

存在しない場合、私は、次の形式のデータのセットを有する:

CAR_MAKE TABLE 
ID  MAKE 
1  Ford 
2  Tesla 
3  Acura 
4  Honda 
5  Toyota 


MAKE_NOTES TABLE 
NOTE_ID MAKE_ID MAKE_NAME NOTE 
1  1  Ford  New QNX-Based Sync System 
2  2  Tesla  Looking forward to Model 3 
3  5  Toyota  Updated Corolla 2018 
4  Null Ferrari  Very Fast and Very Red 

をIとの間(make_name)のデータが繰り返し知っています表1と表2を参照してください。私はcar_makeで最初にエントリーが行われたことを保証することもできません。そのような場合、make_notes.make_idはnullにする必要があります。

WHAT Iは私が何をしようとしているSO FAR

やったことは、それはそれ以外の場合はcar_make.idを挿入し、car_makeに存在しない場合はmake_idにnullを挿入し、make_notesに行を挿入します。

これは、make_nameがcar_makeに存在する場合にはうまくいきますが、car_makeに存在しないmake_nameを持つレコードを挿入しようとすると、レコードは挿入されません(エラーもスローされません)。

INSERT INTO make_notes (
    make_id, 
    make_name, 
    note 
) 
SELECT 
    id, 
    'ford', 
    'New Note' 
FROM car_make 
WHERE make = 'ford'; 

また、私はサブクエリとしてこれを使用しようとしました:

SELECT 
    CASE 
     WHEN (SELECT EXISTS (SELECT 1 FROM car_make where make = 'Ferrari') = 1) 
     THEN car_make.id 
     ELSE null 
    END AS make_id 
FROM car_make; 

私はALBEエラーをスローせずに私のメインのクエリにそれをintergrateされていません。独立したクエリとして、car_makeの各エントリに対して1つの行を返します。「Ferrari」が存在しない場合はnull、存在する場合は各IDを返します。

QUESTION

は、どのように私は 'make_notes' 内に挿入し、make_nameはcar_makeに存在しない場合はnullを挿入し、make_nameが存在しない場合car_make.id挿入するINSERTクエリを作成するのですか?

答えて

1

私はIF()句を使用すると、あなたのケースのために働くべきだと思う:

INSERT INTO `make_notes` (
    make_id, 
    make_name, 
    note 
) 
VALUES(
    IF(
     ((SELECT COUNT(*) FROM `car_make` WHERE `make` = 'ford') > 0), 
     (SELECT `id` FROM `car_make` WHERE `make` = 'ford'), 
     NULL 
    ), 
    'ford', 
    'New note' 
); 
0

私はあなたが1つのクエリでそれを行うことはできないと思います。私はselectを実行してcar_makeテーブルからIDを取得しなければならないと思います。次に、挿入を行います。

関連する問題