【问题标题】:MySQL Insert INTO using SELECT from another table with additional dataMySQL Insert INTO 使用 SELECT 从另一个表中添加附加数据
【发布时间】:2015-02-21 13:47:34
【问题描述】:

我想要实现的目标

我正在尝试将一个表中的记录插入到另一个表中,但还添加了并非来自第二个表的其他数据。

示例问题

我正在尝试将插入字段 1、字段 2 和字段 3 放入表 A。 field1 和 field2 来自 tableB。但是,field3 是我将使用我的应用程序填充的一些额外的任意数据。

到目前为止的查询

INSERT INTO tableA (field1, field2, field3) SELECT (field1, field2) FROM tableB WHERE id='1'

问题

目前没有插入Field3,因为上述查询在查询中没有该字段。我试过了:

INSERT INTO tableA (field1, field2, field3) (SELECT (field1, field2) FROM tableB WHERE id='1'), 'somevalue';

但这似乎不起作用。

我不希望将 field3 设置为 NULL 或空字符串。我需要填充该列,但是我需要使用 INSERT 范围之外的数据填充它。在上面的示例中,它应该是“somevalue”。

【问题讨论】:

  • INSERT INTO tableA (field1, field2, field3) (SELECT (field1, field2, 'somevalue') FROM tableB WHERE id='1');

标签: mysql


【解决方案1】:

当您从另一个表中插入数据时,插入语句列的数量应该与选择列匹配在您的情况下,这可能发生

INSERT INTO tableA (field1, field2, field3) 
SELECT (field1, field2,Null or 'Somevalue') FROM tableB WHERE id='1' // You have to pass some value or null or ''

【讨论】:

  • 也许我的问题不清楚。我不希望 field3 为 NULL 或空值。我需要设置它,但超出了 INSERT 的范围。
  • 你能告诉我 field3 中的 somevalue 应该是什么吗?
  • 正是那个,'somevalue'。它是什么并不重要,但它只是不是从 tableB 保存或返回的值。
  • kk 做一件事现在传递 null 而不是随时更新 null 与你 somevalue..@BigPun
  • 这将导致多个查询,这正是这种子查询旨在避免的。查看标记的答案。
【解决方案2】:

您只需将常量包含在select 列表中:

INSERT INTO tableA(field1, field2, field3)
    SELECT field1, field2, 'somevalue'
    FROM tableB
    WHERE id = '1';

另外,不要将 select 中的列括在括号中。

【讨论】:

    猜你喜欢
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    相关资源
    最近更新 更多