【问题标题】:MySQL insert from select queryMySQL 从选择查询中插入
【发布时间】: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;

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

【问题讨论】:

  • 无法在您选择的表上插入/更新。

标签: mysql insert


【解决方案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 中放置相同的值。
  • 与其想它会做什么,不如去做。我做了两个表,用数据填充它们,并使用了这个查询。它奏效了。
猜你喜欢
  • 2016-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-31
  • 2014-09-01
  • 1970-01-01
  • 2018-10-07
相关资源
最近更新 更多