2013-03-26 84 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部分是怎麼看的,所以我不知道這是否會起作用。