是否可以在子查询中为INSERT选择列名?

时间:2012-12-26 15:45:34

标签: mysql sql insert subquery

是否可以在子查询中为INSERT选择列名?

例如,如果我有一个表(table1)将事件映射到另一个表(table2)中的列:

表1:

+------+--------+---------+
| id   | events | columns |
+------+--------+---------+
|    1 | event1 | column1 |
|    2 | event2 | column2 |
|    3 | event3 | column3 |
|    4 | event4 | column1 |
|    5 | event5 | column2 |
|    6 | event6 | column3 |
+------+--------+---------+

表2:

+------+---------+---------+---------+
| id   | column1 | column2 | column3 |
+------+---------+---------+---------+
|  ... |     ... |     ... |     ... |
+------+---------+---------+---------+

是否有SQL语句,例如:

INSERT INTO table2 
(
    id, 
    (SELECT columns          /* the interesting subquery */
     FROM table1 
     WHERE events='event1')
) 
VALUES (1, 123);

会导致table2插入值:

+------+---------+---------+---------+
| id   | column1 | column2 | column3 |
+------+---------+---------+---------+
|    1 |     123 |    NULL |    NULL |
+------+---------+---------+---------+

1 个答案:

答案 0 :(得分:3)

不,您不能将表达式用于标识符。你可以这样做:

insert into table2 (id, column1, column2, column3)
select 1,
  case columns when 'column1' then 123 else null end,
  case columns when 'column2' then 123 else null end,
  case columns when 'column3' then 123 else null end
from table1
where events = 'event1'