我在两个单独的数据库中有两个表,结构略有不同: destTable:姓名,地址,城市,州,邮编,国家,电子邮件,电话,公司 srceTable:公司,地址,城市,州,邮编,国家,姓名,电子邮件,电话
当我尝试使用此声明时:
INSERT INTO db1.destTable (name, address, city, state, zip, country, email, phone, company)
SELECT company, address, city, state, zip, country, name, email, phone
FROM db2.srceTable
WHERE db2.srceTable.email NOT EXISTS(SELECT email
FROM db1.destTable
WHERE (db2.srceTable.email=db1.destTable.email)
我收到此错误:
#1064 - 您的SQL语法出错;查看与MySQL服务器版本对应的手册,以便在第4行
'EXISTS(SELECT email FROM srceTable'
附近使用正确的语法
我已经尝试了几个版本,用NOT IN替换了EXISTS,一切都会产生错误。
这个副本的秘诀是什么? (哦,我只有电子邮件字段,我担心它是一个复制品。)
谢谢,
皮特
答案 0 :(得分:2)
您错过了NOT EXISTS语句中的最后一个)
。
INSERT INTO db1.destTable (name, address, city, state, zip, country, email, phone, company)
SELECT company, address, city, state, zip, country, name, email, phone
FROM db2.srceTable
WHERE db2.srceTable.email NOT EXISTS(SELECT email
FROM db1.destTable
WHERE (db2.srceTable.email=db1.destTable.email))
答案 1 :(得分:0)
也许你在尝试使用NOT IN?
INSERT INTO db1.destTable (name, address, city, state, zip, country, company, email, phone)
SELECT company, address, city, state, zip, country, name, email, phone
FROM db2.srceTable
WHERE db2.srceTable.email NOT IN (SELECT email FROM db1.destTable)
INSERT和SELECT语句中的列数也不同。编辑:好的,因此字段略有不同,因为我没有注意到SELECT语句中的name
。我已经编辑了我的陈述,所以它现在交换名称和公司,因为我仍然无法理解原始陈述中的顺序。
答案 2 :(得分:0)
您可以在电子邮件列中创建唯一索引。
然后INSERT IGNORE INTO ...
目标中已有的记录将被忽略。不需要where子句。
答案 3 :(得分:0)
你必须在WHERE子句之后删除db2.srceTable.email
并在最后添加)
,同时重新排序SELECT字段,你可以在列中添加混合数据
INSERT INTO db1.destTable (name, address, city, state, zip, country, email, phone, company)
SELECT name, address, city, state, zip, country, email, phone, company
FROM db2.srceTable
WHERE NOT EXISTS (SELECT email
FROM db1.destTable
WHERE db2.srceTable.email=db1.destTable.email)