MySQL - 比较表后更新两个表中的列

时间:2013-03-26 20:08:07

标签: mysql

我绝不是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中的所有内容重叠

2 个答案:

答案 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 &&
;