2014-10-02 52 views
0

我有兩個表,第一個帶有一個指南名稱,章節和主題列表,隨着時間的推移,當新的指南添加或不具有相同的名稱,讓我們調用「導遊」,有點這樣的:Mysql更新其中計數不同返回多個行

|---Name---|---Chapter---|---Topic---| 
|The Hearth| 1   |Educational| 
|The Hearth| 2   |Educational| 
|The Hearth| 3   |Educational| 
|The Brain | 1   |Maths  | 

,另一臺在那裏我一個ID分配給每個教程,讓所謂的「簡歷」,像這樣

|---id---|---Name---|---Topic---| 
| 1  |The Hearth|Educational| 
| 2  |The Brain |Maths  | 

現在,當相同的導名稱被添加到「指南」,它有一個不同的話題,如:

|---Name---|---Chapter---|---Topic---| 
|The Hearth| 4   |Tales  | 

我需要更新的「簡歷」表:

|---id---|---Name---|---Topic---| 
| 1  |The Hearth|MIXED  | 
| 2  |The Brain |Maths  | 

我一直在嘗試不同的方式,這是我到目前爲止有:

UPDATE resume J INNER JOIN guides P ON J.name = P.name SET J.topic = "Mixed" 
WHERE  J.topic != P.topic AND (SELECT COUNT(DISTINCT a.topic) 
FROM  guides a 
JOIN guides b 
ON a.name = b.name 
AND a.topic != b.topic  
GROUP BY a.name 
HAVING COUNT(DISTINCT a.topic) > 1) 

一切正常,而只有一條記錄,但是如果添加了兩個不同主題的嚮導,子查詢會返回多個行,並且不會進行更新。我知道我可以用php循環來解決這個問題,但是我確定在查詢本身必須有一種方法來處理這個問題,我會很感激這方面的任何信息。

在此先感謝

回答

2

你可以首先做一個SELECT COUNT後來加入優化查詢速度:

UPDATE resume J 
INNER JOIN (
SELECT COUNT(DISTINCT A.topic) AS num, A.name 
FROM guides A 
GROUP BY A.name 
HAVING COUNT(DISTINCT A.topic)>1) AS P ON J.name = P.name 
SET J.topic = "Mixed" 
+0

這完美的工作!我不知道這是可能的,我的大腦仍在努力理解它。感謝chianh! – Aramil 2014-10-02 05:34:07