2

我正在尝试插入多行,其值不是从现有表中获取而是从外部提供的以及使用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,第一个 2select不受where子句影响。

我该如何纠正?

4

1 回答 1

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 ;
于 2017-04-03T13:28:44.517 回答