0

我绝不是 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 中重叠

4

2 回答 2

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部分会是什么样子,所以我不知道这是否会起作用。

于 2013-03-26T20:49:23.070 回答
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 &&
;
于 2013-03-29T16:59:25.390 回答