将字段从一个 MySQL 数据库表复制到另一个表中的顽固问题

问题描述 投票:0回答:0

我代表一个团队创建了一个仪表板,其中包含美国所有的消防行动、能力、可用资源等,每年都会为美国扑灭野火的当局提供信息。

根据我们的联络,我们的仪表板应该有 3 个主要选项卡/部分,我正在尝试创建一个足以在专注于跑道数据的表格中创建所有数据可视化的数据表。

使用 Table Data Import Wizard,我创建了一个包含 4 个表的

runways
数据库:
airports
airport_schedules
runway
firefighting_aircraft
.

我需要创建一个包含 11 个字段的新表:

  • 1 来自
    airports
  • 1 来自
    airport_schedules
  • 9 来自
    runway

但是,为了使事情变得简单快捷,我们的目标只是使用

here
提供的模板将
airports
airport_schedules
中的单个所需列添加到已经存在的runway表中。通读之后,我运行了相同的 2 个命令,但名称已更改:

ALTER TABLE runway ADD COLUMN Facility_Type TEXT;

UPDATE
    runway
    INNER JOIN airports ON runway.Dep_Airport_ID = airports.Dep_Airport_ID
SET
    runway.Facility_Type = airports.Facility_Type;

但我一直收到这样的错误:

错误代码:2013。在查询 30.000 秒期间丢失与 MySQL 服务器的连接

或者这个:

Error Code: 1205. Lock wait timeout exceeded;尝试重启交易

所以我调整了我的偏好,然后再次点击运行,但是等了一个小时我自己取消了操作,因为它不应该花那么长时间。这是目前对我来说最重要的问题/困惑,当两个表每个只有大约 20,000 条记录时,为什么要花这么长时间?花费这么长时间的事实是否意味着它没有做我想要它做的事情,即将机场表中的 Facility_Type 字段添加到跑道表?

在那之后,我使用本教程中提供的模板以 3 种不同的方式尝试了一种不同的方法。

第一种方式:

ALTER TABLE runway ADD COLUMN Facility_Type TEXT;

INSERT INTO runway ( Facility_Type )
SELECT
    Facility_Type
FROM
    airports;

输出窗格:

17:49:43  ALTER TABLE runway ADD COLUMN Facility_Type TEXT    0 row(s) affected Records: 0  Duplicates: 0  Warnings: 0    0.031 sec
17:50:02  INSERT INTO runway (Facility_Type) SELECT Facility_Type FROM airports   19928 row(s) affected Records: 19928  Duplicates: 0  Warnings: 0    0.391 sec

但是当我从跑道运行一个选定的设施类型时,我会得到所有-

NULL
s。这对我来说毫无意义!

第二种方式:

INSERT INTO runway (Facility_Type)
SELECT
    Facility_Type
FROM
    airports
WHERE
    runway.Dep_Airport_ID = airports.Dep_Airport_ID;

输出窗格:

Error Code: 1054. Unknown column 'runway.Dep_Airport_ID' in 'where clause'

第三种方式:

ALTER TABLE runway ADD COLUMN Facility_Type TEXT;

INSERT INTO runway (Facility_Type)
SELECT
    Facility_Type
FROM
    airports
WHERE
    runway.Dep_Airport_ID = airports.Dep_Airport_ID;

并得到与上面第二个版本相同的错误......

然后我回到原来的解决方案,因为它对我来说似乎是最有希望的,在使用不同的搜索词再次谷歌搜索后,我找到了这个 w3schools tutorial 并使用它,运行这个新命令:

ALTER TABLE runway ADD COLUMN Facility_Type TEXT;

UPDATE
    runway
SET
    runway.Facility_Type = airports.Facility_Type
WHERE
    runway.Dep_Airport_ID = airports.Dep_Airport_ID;

结果是:

错误代码:1054。“where 子句”中的未知列“airports.Dep_Airport_ID”

最后,在查看了所有这些模式错误之后,我意识到虽然第一个版本存在某种形式的运行时错误,但它并没有抛出未知列错误。因此,我尝试合并 join 和 where 子句:

UPDATE runway
INNER JOIN airports ON runway.Dep_Airport_ID = airports.Dep_Airport_ID
SET runway.Facility_Type = airports.Facility_Type
WHERE `runway`.`Dep_Airport_ID` = `airports`.`Dep_Airport_ID`;

导致另一个运行时错误:

18:24:55    UPDATE runway INNER JOIN airports ON runway.Dep_Airport_ID = airports.Dep_Airport_ID SET runway.Facility_Type = airports.Facility_Type WHERE `runway`.`Dep_Airport_ID` = `airports`.`Dep_Airport_ID`    Error Code: 2013. Lost connection to MySQL server during query  6000.015 sec

我确实认为最终版本会起作用,并且我猜测接近它的东西会完成这项工作。

mysql rdbms merging-data
© www.soinside.com 2019 - 2024. All rights reserved.