如何使用子查询的多行返回值插入表中?

Posted

技术标签:

【中文标题】如何使用子查询的多行返回值插入表中?【英文标题】:How to Insert into table using multiple row returned value from subquery? 【发布时间】:2016-10-31 03:49:10 【问题描述】:

我究竟如何让它发挥作用?我正在尽力形成一个查询,该查询采用从第一个查询生成的主键,然后将它们与静态第二个值 (33) 一起插入到第二个表中。我显然收到了“用作表达式的子查询返回的不止一行”错误。我用谷歌搜索了我的眼球,无法弄清楚这个问题。也许有更好的方法来做我想做的事情。

如果这很重要,我正在使用 Postgresql 9.5。

 WITH x AS (INSERT INTO OPTIONS (manufacturer_id, category, name, description)
VALUES (
    UNNEST(ARRAY['10', '22', '33']),
    'ExtColor',
    UNNEST(ARRAY['EC', 'IC', 'IO']),
    UNNEST(ARRAY['a', 'b', 'c'])
)
RETURNING option_id)
INSERT INTO opt_car_data (car_id, option_id) VALUES ((SELECT option_id FROM x), 33);

【问题讨论】:

【参考方案1】:
WITH x AS (
    INSERT INTO options (manufacturer_id, category, name, description)
    VALUES (
        UNNEST(ARRAY['10', '22', '33']),
        'ExtColor',
        UNNEST(ARRAY['EC', 'IC', 'IO']),
        UNNEST(ARRAY['a', 'b', 'c'])
    )
    RETURNING option_id
)
INSERT INTO opt_car_data (car_id, option_id) 
SELECT option_id, 33 
FROM x;

【讨论】:

以上是关于如何使用子查询的多行返回值插入表中?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用具有多个结果的子查询将值插入表中?

如何在mysql中将单行插入查询重构为多行插入查询?

MySql - 使用连接子查询插入多行?

从可选子查询中插入多个返回值

如何将查询结果转换为字符串并将其插入表行

错误:用作表达式的子查询返回多行。 POSTGRESQL / 查看器