2017-04-03 85 views
2

我試圖插入多個行,其值不是從現有表中提取的,而是從外部提供的,以及使用INSERT ... SELECT ... WHERE的where條件提供的。INSERT SELECT WHERE從常量插入多行

下面的查詢不工作:

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) 

我想查詢,因爲where條件爲假不插入任何行。但是,where子句僅適用於最後的select和第1個select不受where子句的影響。

我該如何糾正它?

+0

你可以選擇嘗試*從(所有查詢),其中1> 2 –

回答

3

只是包裝的UNION ALL子查詢的子查詢,以便應用WHERE整個結果集:

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

感謝它的工作。 :) –

+1

@PankajSinghal你知道你需要接受這個問題,所以社區可以知道解決方案被發現是正確的嗎? –

+2

@MasivuyeCokile是的,我知道它。但是,你是否意識到我不能接受答案,除非是10分鐘? –