【问题标题】:SELECT on INSERT's VALUES在 INSERT 的 VALUES 上选择
【发布时间】:2015-03-05 08:50:49
【问题描述】:

我的问题是有没有办法做到这一点:

INSERT INTO t1 (c1, c2, c3, c4, c5)
VALUES (SELECT c1 FROM t2, 15, 2, 'Name', SELECT c5 FROM t4);

我知道我有INSERT INTO t1 FROM SELECT,但我不能在这种特殊情况下使用它,我想知道是否可以在插入值中添加选择。

【问题讨论】:

标签: mysql sql insert sql-update


【解决方案1】:

子查询与 parenthesis 一起使用,如:

INSERT INTO t1 (c1, c2, c3, c4, c5)
VALUES ((SELECT c1 FROM t2), 15, 2, 'Name', (SELECT c5 FROM t4));

【讨论】:

    【解决方案2】:

    是的,这是可能的,但不是你提到的语法:

    INSERT INTO t1 (c1, c2, c3, c4, c5)
    SELECT t2.c1 , 15, 2, 'Name', t4.c5
    FROM t2, t4
    WHERE t2.some_field = t4.some_other_field
    

    t2t4 表之间应该有一些逻辑连接或它们自己的 WHERE 条件。

    【讨论】:

      【解决方案3】:

      这应该适合你。

      INSERT INTO `pages` (name, content, modified) 
      VALUES ('new page', (SELECT `description` FROM `categories` WHERE id = '4'), NOW());
      

      我想你只是忘了把子查询放在括号里。

      【讨论】:

        【解决方案4】:

        是的,有办法做到这一点。您需要为每个SELECT 使用parenthesis

        INSERT INTO t1 (c1, c2, c3, c4, c5)
        VALUES ((SELECT c1 FROM t2), 15, 2, 'Name', (SELECT c5 FROM t4));
        

        请记住,您的选择应该只返回 1 个值。

        【讨论】:

          【解决方案5】:

          你应该使用这样的东西:

          INSERT INTO  t1 (c1, c2, c3, c4, c5)
          SELECT
             f1.c1, 15, 2, 'Name', f2.c5
          FROM
             (SELECT c1 FROM t2) AS f1
              CROSS JOIN
             (SELECT c5 FROM t4) AS f2
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-05
            • 2010-10-26
            • 2012-07-06
            • 1970-01-01
            • 2011-08-30
            • 2011-07-17
            相关资源
            最近更新 更多