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 从选择查询中插入的主要内容,如果未能解决你的问题,请参考以下文章