在一个查询中插入多个值(顺序)

时间:2014-02-01 09:07:32

标签: sql postgresql

这是我的疑问:

INSET INTO cities (name, country_id)
VALUES ('New York', 11), ('London', 215), ('Moscow', 66)

是否正确地按行查询顺序插入行?因此,New Yor将首先插入,而不是伦敦,而不是莫斯科。是否有可能首先插入伦敦? 我在postgresql文档中找不到这些信息。

编辑:

所以,我需要知道,认为首先是纽约,第二个是伦敦,第三个是莫斯科,这是安全的。

edit2:

我只需要将城市与已返回的ID相关联。 完整查询:

INSET INTO cities (name, country_id)
    VALUES ('New York', 11), ('London', 215), ('Moscow', 66) 
    RETURNING id

那么,多次插入是不可能的?

EDIT3:

我的问题重复了这一个:Is INSERT RETURNING guaranteed to return things in the "right" order? 所以,我想确保我需要在它自己的查询中进行每个插入。 感谢。

4 个答案:

答案 0 :(得分:1)

数据未按指定顺序存储。

答案 1 :(得分:1)

可以返回多个值,因此您可以通过这种方式匹配它们,例如:

INSET INTO cities (name, country_id)
    VALUES ('New York', 11), ('London', 215), ('Moscow', 66) 
    RETURNING id, name, country_id

只需选择要返回的列。

答案 2 :(得分:0)

如果没有“ORDER BY”子句,则SELECT语句不必按照插入的顺序返回记录。

也许您应该在表格中添加一个自动增量标识字段,然后按此字段对结果进行排序。

答案 3 :(得分:0)

如果您太关注插入数据的顺序,请在表中添加一列作为序列,在isnert期间指定

示例:

INSET INTO cities (
  seq, 
  name, 
  country_id
)
VALUES ( seq + 1,  'New York', 11)

INSET INTO cities (
  seq, 
  name, 
  country_id
)
VALUES ( seq + 2,  'London', 215)... etc

当然通过从已插入的数据中获取先前的seq值来初始化您的序列