MySQL 从选择查询中插入

Posted

技术标签:

【中文标题】MySQL 从选择查询中插入【英文标题】:MySQL insert from select query 【发布时间】:2013-03-08 20:15:40 【问题描述】:

我有两张桌子:

表 1

| ColumnA  | ColumnB  |
-----------------------
| 123      | 1        |

表2

| ColumnA  | ColumnC  |
-----------------------
| 123      | 20       |

我修改了表 2 以添加一个新列,所以它看起来像这样

新表2

| ColumnA  | ColumnC  | ColumnB  |
----------------------------------
| 123      | 20       | NULL     |

现在,我想选择TABLE1.Column B 的值并将其插入TABLE2.Column B

所以我写了这个查询:

INSERT INTO TABLE2 (ColumnB)
SELECT t1.ColumnB
FROM TABLE1 AS t1
INNER JOIN
TABLE2 AS t2
ON t1.ColumnA = t2.ColumnA;

但它似乎并没有解决问题。我错过了什么吗?

【问题讨论】:

无法在您选择的表上插入/更新。 【参考方案1】:

您需要使用 UPDATE 语句来更新表。 INSERT 将添加新行。

UPDATE Table2
JOIN Table1
ON
Table2.columnA = Table1.ColumnA
SET 
Table2.ColumnB = Table1.ColumnB
WHERE
Table2.ColumnB IS NULL

【讨论】:

感谢您的快速回复。奇怪的是,我不断收到语法错误。 您的 SQL 语法有误;检查与您的 mysql 服务器版本相对应的手册,以在第 5 行的“FROM table1 INNER JOIN table1.columnA = table2.columnA WHERE table2.columnB i”附近使用正确的语法 糟糕,没有注意到这是 MySQL 而不是 MSSQL。更新后的查询应该可以正常工作。 谢谢!那也不起作用,但我做了一些小的编辑,它起作用了。 (见上面的编辑) @Spartanblogger duh,显然是我的错误。很高兴你能弄明白。【参考方案2】:

您似乎不想插入。看来您想更新 table2 中已有的行。您可以使用:

update table2 set ColumbB=(select ColumnB from table1 where table1.ColumnA=table2.ColumnA)

【讨论】:

这里没有必要引入子查询,在这种情况下甚至会导致错误的结果。 @Hazzit 在这种情况下,我不相信查询会运行,但如果它运行,每一行都将具有相同的值。 我知道它会运行,因为我在发布答案之前对其进行了测试。子查询从来都不是最快的解决方案,但对于正在学习的人来说,它通常是最容易理解的。 @kainaw 运行良好,它会为每条记录在 ColumnB 中放置相同的值。 与其想它会做什么,不如去做。我做了两个表,用数据填充它们,并使用了这个查询。它奏效了。

以上是关于MySQL 从选择查询中插入的主要内容,如果未能解决你的问题,请参考以下文章

MySQL从查询结果中获取数据

真正插入时的Mysql查询选择案例

使用 Checkbox 确定 MySql 查询

如何使用存储过程在mysql中选择和插入值

mysql插入tbl(从2个表中选择)

从选择查询+变量值插入表