2017-03-22 12 views
0

私はMySQLを使用しています。どのようにして関連するデータの検証時に述語化されたテーブルにINSERTを実行できますか?考案された例を許してください。SQL条件付きINSERT

私のテーブルがある場合:

> SELECT * FROM colors; 
id color owner 
-- ------ ----- 
10 red 2 
11 banana 6 
12 blue 9 

とfruit.colorは、外部キーは、私はバナナに関する情報を挿入したい

colors.idことです

> SELECT * FROM fruit; 
id color_id name 
-- -------- ------- 
59 10  cherry 
60 12  blueberry 

が、色の所有者が6の場合にのみ表示されます。

INSERT INTO 
    fruit 
    (color_id, name) 
VALUES 
    (11, 'banana'); 
最後の節は明らかに本物ではないです

INSERT INTO 
    fruit 
    (color_id, name) 
VALUES 
    (11, 'banana') 

-- ??? I have no idea what to put here ??? 
ONLY IF (
    (SELECT COUNT(*) FROM fruit 
    INNER JOIN colors ON fruit.color_id = colors.id 
    AND colors.id  = 11 
    WHERE colors.owners = 6) >= 1 
) 

ことが、私はそこに何をするか分からない:

私のような何かをしたいと思います。私が挿入しようとしているのowner列が私が提供している値と等しい場合、そのアイデアは値を挿入するだけです。

ヘルプ?

あなたはこのような何かを試すことができ

答えて

1

insert into fruit (color_id, name) 
select 11, 'banana' 
where (select count(*) from fruit join colors on fruit.color_id = colors.id 
where colors.id = 11 and colors.owner = 6) >= 1; 

またはあなたのために同等に

insert into fruit (color_id, name) 
select 11, 'banana' 
where exists 
(select * from fruit join colors on fruit.color_id = colors.id 
where colors.id = 11 and colors.owner = 6); 
+0

これは優れた回答です。私はINSERT INTO ... SELECT ...がそのように使用できることを認識していませんでした。ありがとう! –

0

うこの作品?

IF (SELECT COUNT(*) FROM fruit 
    INNER JOIN colors ON fruit.color_id = colors.id 
    AND colors.id  = 11 
    WHERE colors.owners = 6) >= 1 
THEN 
    INSERT INTO fruit 
    (color_id, name) 
    VALUES 
    (11, 'banana'); 
END IF; 
+0

私はこれを動作させることができませんでした。私は構文エラーが出てきた。 –