MySql 错误 1093 尝试使用两个数据库和两个表进行更新
Posted
技术标签:
【中文标题】MySql 错误 1093 尝试使用两个数据库和两个表进行更新【英文标题】:MySql Error 1093 trying to UPDATE using two databases and two tables 【发布时间】:2020-12-10 06:48:15 【问题描述】:DataBase_1 有一个用户列表及其 vBulletinId
DataBase_2 有 vBulletin 用户及其 vBulletinId 和 UserGroupId
我想从 Database_2 中找到所有不在 Database_1 中的 vBulletin 用户,并将他们的 UserGroupId 更改为 15
UPDATE database_2.user
SET
usergroupid = 15
WHERE
(
SELECT UserId
FROM database_2.user
WHERE UserId NOT IN
(
SELECT vBulletinId
FROM database_1.Users
)
);
目前我收到一个“您无法在 FROM 子句中指定目标表 'user' 进行更新”
任何帮助都会很棒。谢谢。
=== 解决方案 ===
一个有效的简化解决方案。
UPDATE database_2.user
SET
usergroupid = 15
WHERE userid NOT IN
(
SELECT vBulletinId FROM database_1.Users
);
【问题讨论】:
【参考方案1】:UPDATE database_2.user
LEFT JOIN database_1.Users ON database_2.user.UserId = database_1.Users.vBulletinId
SET database_2.user.usergroupid = 15
WHERE database_1.Users.vBulletinId IS NULL
或
UPDATE database_2.user
SET database_2.user.usergroupid = 15
WHERE NOT EXISTS ( SELECT NULL
FROM database_1.Users
WHERE database_2.user.UserId = database_1.Users.vBulletinId )
【讨论】:
谢谢。但是这个查询时间太长了,我的连接在 30 秒后就断开了。我首先使用 SELECT FROM 对其进行了测试。 @Bubba 这可能是由于表格统计数据不舒服。NOT EXISTS
变体添加 - 检查。
谢谢。对于 NOT EXISTS
变体,我必须设置 50 行的限制(这需要 18 秒)。 100 行将触发 30 秒超时。我通过上面的SELECT
查询知道,db2 (197k) 中有 37,717 个用户不在 db1 (160k) 中。所以我想我需要一些处理时间更少的东西。出于某种原因,NULL
花费的时间太长了。
@Bubba 用于连接的列的索引是否存在于表中?以上是关于MySql 错误 1093 尝试使用两个数据库和两个表进行更新的主要内容,如果未能解决你的问题,请参考以下文章