【问题标题】:Inserting multiple data into table with SELECT and JOIN statement使用 SELECT 和 JOIN 语句将多个数据插入表中
【发布时间】:2018-06-05 08:00:52
【问题描述】:

我想将数据插入到表中,其中一列由选择查询填充。这是我的 SQL 语句:

INSERT INTO books ( gid, type, membernumber,  changedate, user)
  VALUES( '2b4493e8-cae8-4624-8177-fcc96553c5be',
          2,
          (SELECT member FROM mem m JOIN group g ON m.uid = g.sgroup),
          TIMESTAMP '2017-01-03 00:00:00.000',
          'mark'
        );

我想要实现的是对于每个插入,membernumber 将取自 mem 表,基于 JOINgroup 表。

当我执行这个语句时,我得到了错误:

用作表达式的子查询返回多行

例如,如果连接将产生 20 行,则将插入 20 条记录,每个 member 值替换插入中的 membernumber 20 行。

更新

我还有另一个查询,其中两列必须用 SELECT-JOIN 语句替换。 @Tim 给了我一个专栏的例子。我想要一个用两个 SELECT-JOIN 语句填充两列的示例。

【问题讨论】:

    标签: mysql sql postgresql


    【解决方案1】:

    您可以将其改写为INSERT INTO ... SELECT

    INSERT INTO books (gid, type, membernumber, changedate, user)
    SELECT
        '2b4493e8-cae8-4624-8177-fcc96553c5be',
        2,
        member,
        '2017-01-03 00:00:00.000',
        'mark'
    FROM mem m
    INNER JOIN `group` g
        ON m.uid = g.sgroup;
    

    这应该可以修复您的语法错误,但现在您必须决定在没有 WHERE 子句的情况下此插入是否有意义。您几乎对每个成员的每个字段都进行了硬编码。

    【讨论】:

    • 感谢您的回复。我的下一个问题是,是否可以在同一个查询中对 2 个或多个 Select-Join 语句执行相同的操作,因为我有另一个与第一个类似的问题,但现在使用 3 个 Select-Join 语句。您能否使用上面的查询向我展示一个示例,但假设“用户”将具有 SELECT-Join 之类的成员编号。谢谢
    • @EddyFreeman 我不完全听从您的评论,但看起来与这个问题有很大的不同。您可能想问一个新问题。
    猜你喜欢
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 2013-12-25
    • 2013-06-11
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多