我有2个表,其中包含一些重复数据。是否可以使用JOIN将2个表合并到第3个表中,或者将表2(带有更新的信息)合并到表1(旧数据)中?
我知道这似乎是一个特殊的问题,但原始数据库有新的数据库(#2)不包含的额外列。当我试图合并它们时,我不断用额外的数据来破坏旧的行。
这种情况下的数据库是邮政编码,城市名称等。我正在尝试确定如何插入丢失的邮政编码行。在这种情况下,邮政编码是唯一的。列为zip_code
,city
,lat
和lon
。表1包含time_zone
等唯一列。
我试着INSERT NOT IN但正如我所说,我一直搞砸了。有人可以通过我的示例列向我展示正确的方法,而不会再次使用它吗?一旦我看到正确的方法,我可以稍后将其他列添加到语句中。
答案 0 :(得分:0)
就我而言,不合并到第3个表格更容易。我发现这种方法非常有效。它允许您将表B合并到表A中,其中表A上已经存在匹配的行。在这种情况下,zip_code中的邮政编码。
INSERT INTO testing.table_name
(
zip_code,
city,
lat,
lon)
SELECT zip-new.zip_code,
zip-new.city,
zip-new.lat,
zip-new.lon,
FROM testing.zip-new
WHERE zip_code not in (
SELECT zip_code
FROM testing.table_name
)
希望它可以帮助别人。
答案 1 :(得分:-1)
听起来你要做的就是全力以赴。 MySQL并不直接支持完全外部联接,但您可以使用几个LEFT JOIN查询来模拟它们,并将结果合并在一起。
SELECT table_1.*, table_2.*
FROM table_1
LEFT OUTER JOIN table_2
ON table_1.somecolumn = table_2.somecolumn
UNION
SELECT table_1.*, table_2.*
FROM table_2
LEFT OUTER JOIN table_1
ON table_1.somecolumn = table_2.somecolumn
这需要一些工作,因为您需要定义要加入的列,以及您用于第3个表的列。
编辑
由于您似乎不需要将数据放入第3个表格,因此有2个简单的选项
将zip_code设置为唯一键,然后使用以下命令: -
INSERT IGNORE INTO testing.table_name
(zip_code, city, lat, lon)
SELECT zip-new.zip_code, zip-new.city, zip-new.lat, zip-new.lon
FROM testing.zip-new
这将忽略任何为已存在的邮政编码插入记录的尝试。
如果要检查,请将其作为连接进行(使用 NOT IN(子查询...)语法应该更有效
INSERT INTO testing.table_name
(zip_code, city, lat, lon)
SELECT zip-new.zip_code,
zip-new.city,
zip-new.lat,
zip-new.lon,
FROM testing.zip-new
LEFT OUTER JOIN testing.table_name ON testing.zip-new.zip_code = testing.table_name.zip_code
WHERE testing.table_name.zip_code IS NULL