【问题标题】:How do you do multiple inserts that have selects您如何进行具有选择的多个插入
【发布时间】:2011-05-13 05:30:04
【问题描述】:

如何插入多个值或必须从 select 语句中获取信息的记录。这不起作用。

INSERT INTO marriedcouples (male,female) VALUES (
(SELECT id FROM men WHERE username='brad',
 SELECT id FROM women WHERE username='jennifer')
(SELECT id FROM men WHERE username='ken',
 SELECT id FROM women WHERE username='barbie'))

假设我有以下表格:

男人(id,name), 女人(id,name), 情侣(id,male,female)

等等

谢谢, 丹

【问题讨论】:

    标签: mysql select insert


    【解决方案1】:
    Insert marriedcouples( male, female )
    Select M.id, W.id
    From Men As M
        Cross Join Women As W
    Where ( M.username = 'brad' And W.username = 'jennifer' )
        Or ( M.username = 'ken' And W.username = 'barbie' )
    

    加法

    在 cmets 中,您专门询问了原始查询的问题。首先,您可以像这样使用原始方法:

    Insert marriedcouples( male, female )
    Select ( Select Id From men Where username = 'brad' )
        , ( Select Id From women Where username = 'jennifer' )
    Union All
    Select ( Select Id From men Where username = 'ken' )
        , ( Select Id From women Where username = 'barbie' )
    

    请注意,每个值都包含在括号中,作为其自己的封装子查询。其次,请注意我使用了Union All 指令来允许我堆叠两个查询并给我两行。第三,请注意我并没有尝试将 Values 指令与子查询结合使用。您可以使用 Values 子句列出值,也可以使用 Select 语句,但不能同时使用这两种方式。显然,这种四个子查询的方法性能不佳,但有助于理解语法的分解。

    【讨论】:

    • 嗨 daniel savage,Thomas 这个解决方案似乎对你有用
    • 我相信你的答案会奏效,但我想知道是否有人可以解释为什么我原来的查询结构不起作用。或者也许提供一个没有连接和别名的例子。我将在循环中从动作脚本动态输出查询,所以我需要结构简单的东西。在我上面的示例中,个人选择和插入自己的工作,直到我将它们组合起来。
    • @daniel savage - 两个问题。首先,如果您打算将 Select 语句与 Insert 语句一起使用,则需要使用该 而不是 的 Values 子句(即不要尝试同时使用两者)。其次,您需要合并(或合并所有)两对 Select 语句,以便获得两行。
    • @daniel savage - 我扩展了我的答案,为您提供有关原始方法中问题的更多信息。
    • @Thomas 所以我只能使用一个带有插入的 Select 子句,并且没有办法做多个。但是有一种方法可以插入多个值,但它们与 Selects 不兼容?我还不太了解加入。我无法想象加入男性和女性如何让插入工作。有没有一种不太优雅但更容易理解的写法?
    猜你喜欢
    • 1970-01-01
    • 2013-07-29
    • 2010-10-26
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    相关资源
    最近更新 更多