2013-03-26 81 views
0

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

+0

的'JOIN'版本是我知道的唯一途径。也许你只需要缩小范围就可以了,所以MySQL做的工作就少了? – 2013-03-26 20:13:35

+0

在下面发布我的修复程序/更新。最终成为一个不同的问题。 – Josh 2013-03-29 17:00:21

回答

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 && 
; 
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 
) 

更新查询将是非常干净了子查询很大并且JOINy。

我不知道你的SET部分是怎么看的,所以我不知道这是否会起作用。