我绝不是MySQL专家。也就是说,我遇到了交叉表匹配和数据更新的问题。相信我在发布之前已经搜索了很长一段时间,但是我发现提到的每个解决方案都提到加入表格,而且当我尝试时,我的查询一直在冻结。
以下查询选择我想要操作的所有数据:
SELECT t1.1, t2.1, t1.2, t2.2, t1.3, t2.3, t1.4, t2.4
FROM t1, t2
WHERE
t1.1='1111111' &&
t1.1 = t2.1 &&
t1.2 = t2.2 &&
t1.3 = t2.3 &&
t1.4 = t2.4 &&
;
这似乎工作正常,并告诉我我想看到什么。但是,接下来我想根据上面找到的结果更新t1中的附加列和t2中的列,这就是我被卡住的地方。
我可以将其转换为使用类似WHERE部分的某种更新查询,但也可以从t1和t2更新列(附加列,比如t1.5和t2.5)?
注意,这些表没有所有相同的列,但WHERE中的所有内容重叠
答案 0 :(得分:0)
您可以执行类似
的操作UPDATE t1
SET ...
WHERE id IN (
SELECT a.id
FROM t1 a, t2 b
WHERE
a.1 = '1111111' AND
a.1 = b.1 AND
a.2 = b.2 AND
a.3 = b.3 AND
a.4 = b.4 AND
)
UPDATE查询将很好,干净,子查询很大且JOINy。
我不知道你的SET
部分会是什么样子,所以我不知道这是否有效。
答案 1 :(得分:0)
事实证明,我尝试过的所有事情都可能会很好。但是,我正在使用的数据库/表从未被编入索引。我的问题看起来很糟糕,但实际上可能只需要很长时间才能完成。
其次,一个表中的一些值设置为varchar而不是int。在我们解决这个问题之前,即使是索引也无法帮助进行这些比较。
在上面的更新之后,我能够使用以下查询来完成此工作,现在只需几分之一秒:
UPDATE t1, t2
SET t1.5="x", t2.5="x"
FROM t1, t2
WHERE
t1.1='1111111' &&
t1.1 = t2.1 &&
t1.2 = t2.2 &&
t1.3 = t2.3 &&
t1.4 = t2.4 &&
;