“INSERT INTO SELECT”与“INSERT INTO VALUES ...(SELECT)”

时间:2017-11-10 14:18:53

标签: sql postgresql

一个简短的问题:什么是更好的方式和原因?

使用A

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可以是匹配单行的任何条件,示例在postgresql中有效)

1 个答案:

答案 0 :(得分:5)

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

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

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

通常,insert . . . selectinsert . . . values()更通用。我更喜欢前者,因为它更强大,在更多情况下更有用(包括可以使用values的所有情况)。