SQL を使用する (Oracle 11g を使用する) レガシー コード (C++/Qt) を掘り下げています。私はこのコードを持ってきました(変数名を変更し、読みやすくするために複数行に分けて記述しました):
insert into FOO_TABLE (BEGIN, FIRST_VALUE, SECOND_VALUE, VALUE, BAR) select
999,
D.FIRST,
(select O.SECOND from TABLE_TWO O where O.ID=555),
333,
444
from TABLE_ONE D where D.ID=666
これは次の形式でINSERT INTO ... SELECT ...
ここでは、「select」を挿入と一緒に使用して、単一行の行を取得および作成しているようです。ただし、構文は厄介なようです。私はそれを次のように変更しました:
insert into FOO_TABLE (BEGIN, FIRST_VALUE, SECOND_VALUE, VALUE, BAR) values (
999,
(select D.FIRST from TABLE_ONE D where D.ID=666),
(select O.SECOND from TABLE_TWO O where O.ID=555),
333,
444)
そして、これは問題なく動作します。これは次の形式です。INSERT INTO ... VALUES ...
性能やその他の点で違いはありますか?2行目の方が自然に見えるからです。