INSERT SELECT WHERE 从常量插入多行
INSERT SELECT WHERE insert multiple rows from constants
我正在尝试插入多个行,这些行的值不是从现有 table 中获取的,而是使用 INSERT ... SELECT ... WHERE
.
从外部连同 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
,第 2 个 select
不受 where
子句影响。
如何更正?
只需将 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 ;
我正在尝试插入多个行,这些行的值不是从现有 table 中获取的,而是使用 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
,第 2 个 select
不受 where
子句影响。
如何更正?
只需将 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 ;