2017-03-22 4 views
0

J'utilise MySQL. Comment puis-je exécuter un INSERT dans une table basée sur la validation des données associées? Pardonnez l'exemple artificiel.conditionnelle SQL INSERT

Si mes tableaux sont:

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

et

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

Où fruit.color est une clé étrangère à colors.id

Je veux insérer plus sur une banane, mais que si le propriétaire de la couleur est 6. Voici les premières INSERT:

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

Je voudrais faire quelque chose comme:

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 
) 

Cette dernière clause est évidemment pas vrai, mais je ne sais pas quoi faire là-bas. L'idée est que les valeurs INSERT si la colonne owner du color_id J'essaie d'insérer est égale à la valeur que je fournis.

Aide?

Répondre

1

Vous pouvez essayer quelque chose comme ceci:

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; 

ou équivalente

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

Ceci est une excellente réponse. Je wan't conscient que INSERT INTO ... SELECT ... peut être utilisé de cette façon. Merci! –

0

Est-ce que ce travail pour vous?

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

Je ne pouvais pas obtenir ce travail; J'ai continué à obtenir des erreurs de syntaxe. –