2017-04-03 3 views
2

J'essaie d'insérer plusieurs lignes dont les valeurs ne sont pas tirées d'une table existante mais fournies de l'extérieur avec une condition where en utilisant INSERT ... SELECT ... WHERE.INSERT SELECT WHERE insérer plusieurs lignes à partir de constantes

La requête suivante ne fonctionne pas:

mysql> insert into `my_table` SELECT 1 as a, 2 as b, 3 as c from dual UNION ALL SELECT 4 , 5 , 6 from dual UNION ALL SELECT 7 , 8 , 9 from dual where 1>2 ; 
Query OK, 2 rows affected (0.01 sec) 
Records: 2 Duplicates: 0 Warnings: 0 

mysql> select * from my_table; 
+---+---+------+ 
| a | b | c | 
+---+---+------+ 
| 1 | 2 | 3 | 
| 4 | 5 | 6 | 
+---+---+------+ 
2 rows in set (0.00 sec) 

Je veux interroger à ne pas insérer une ligne parce que la condition where est fausse. Mais, la clause where est appliquée uniquement pour la dernière select et la première 2 select n'est pas affectée par la clause where.

Comment puis-je le corriger?

+0

vous pouvez essayer avec select * from (toute votre requête) où 1> 2 –

Répondre

3

envelopper Juste les UNION ALL sous-requêtes dans une sous-requête de manière à appliquer WHERE à la totalité des résultats:

insert into `my_table` 
select a, b, c 
from (
    SELECT 1 as a, 2 as b, 3 as c 
    from dual 

    UNION ALL 

    SELECT 4 , 5 , 6 
    from dual 

    UNION ALL 

    SELECT 7 , 8 , 9 
    from dual) as t 
where a > b ; 
+0

grâce cela a fonctionné. :) –

+1

@PankajSinghal vous savez que vous devez accepter la question, afin que la communauté puisse savoir qu'une solution a été trouvée correctement? –

+2

@MasivuyeCokile Oui, j'en suis conscient. Mais, êtes-vous conscient du fait que je ne peux pas accepter une réponse à moins de 10 minutes? –