2017-11-10 34 views
0

短い質問:よりよい方法とその理由は何ですか?"INSERT INTO SELECT"対 "INSERT INTO VALUES ...(SELECT)"

INSERT INTO someTable(fieldA, fieldB, fieldC) 
SELECT 'consA', 'consB', other.value FROM other WHERE XXX 

またはB使用して使用

INSERT INTO someTable(fieldA, fieldB, fieldC) 
VALUES ('constA', 'constB', (SELECT other.value FROM other WHERE XXX)); 

または他の何かを...?

xが単一の行に一致する任意condtionすることができ、例は、PostgreSQLで作業している)

+0

私は個人的には最初のものを好むでしょう –

+1

'WHERE XXX'が複数の行を返しても、2番目の方法はエラーを返します。 –

+0

2番目の方法は' VALUES'と 'SELECT'で動作します。表示されている最初の例でそれを行います。 –

答えて

4

第二の方法は、2つのもののいずれかを実行する危険性を実行するため、第1の方法は、一般的に優れている。

  • 副問合せが複数の行を戻す場合は、エラーを生成します。
  • 副問合せが行を戻さない場合は、NULL値を挿入します。

もちろん、これは望ましい動作です。

一般に、insert . . . selectは、insert . . . values()より一般的です。私はそれがより強力でより多くの状況(より多くの状況で有用であるので、前者を好む(valuesが使用できるすべての状況を含む)。