2017-04-03 3 views
2

Ich versuche, mehrere Zeilen einzufügen, deren Werte nicht aus einer vorhandenen Tabelle stammen, sondern von außen zusammen mit einer WHERE-Bedingung unter Verwendung INSERT ... SELECT ... WHERE.INSERT SELECT WHERE mehrere Zeilen von Konstanten einfügen

Die folgende Abfrage funktioniert nicht:

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) 

Ich mag jede Zeile nicht abfragen eingefügt werden, da die where Bedingung falsch ist. Aber die where Klausel gilt nur für die letzten select und 1. 2 select s sind nicht betroffen von where Klausel.

Wie kann ich das korrigieren?

+0

Sie wählen können versuchen * aus (alle Ihre Abfrage), wobei 1> 2 –

Antwort

3

einfach wickeln Sie die UNION ALL Subqueries in einer Unterabfrage, um WHERE auf das gesamte Ergebnismenge anzuwenden:

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

Dank hat es funktioniert. :) –

+1

@PankajSinghal Sie sind sich bewusst, dass Sie die Frage akzeptieren müssen, damit die Gemeinschaft wissen kann, dass eine Lösung gefunden wurde, richtig? –

+2

@MasivuyeCokile Ja, ich bin mir dessen bewusst. Aber sind Sie sich der Tatsache bewusst, dass ich eine Antwort nur annehmen kann, wenn sie 10 Minuten dauert? –

Verwandte Themen