"INSERT INTO SELECT"与"INSERT INTO VALUES ...(SELECT)"

use*_*157 1 sql postgresql

一个简短的问题:更好的方法是什么?为什么?

用一个

INSERT INTO someTable(fieldA, fieldB, fieldC)
SELECT 'consA', 'consB', other.value FROM other WHERE XXX
Run Code Online (Sandbox Code Playgroud)

或使用B:

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

或其他什么......?

(x可以是匹配单行的任何条件,示例在postgresql中工作)

Gor*_*off 6

第一种方法通常更好,因为第二种方法冒着做两件事之一的风险:

  • 如果子查询返回多行,则生成错误.
  • NULL如果子查询未返回任何行,则插入值.

当然,这可能是理想的行为.

一般来说,insert . . . select比较一般insert . . . values().我更喜欢前者,因为它在更多情况下(包括values可以使用的所有情况)更强大,更有用.