1

INSERTのサブクエリで列名を選択することは可能ですか?

たとえば、イベントを別のテーブル(table2)の列にマップするテーブル(table1)がある場合:

表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 |
+------+---------+---------+---------+
4

1 に答える 1

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'
于 2012-12-26T15:53:01.310 に答える