簡體   English   中英

Mysql Update,其中Count Distinct返回多個行

[英]Mysql Update where Count Distinct return more than one row

我有兩個表,第一個表包含指南名稱,章節和主題的列表,當添加新的指南時,如果使用相同或不相同的名稱,它們會隨時間而變化,我們稱其為“指南”,如下所示:

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

僅有一條記錄時,一切正常,但是如果添加了兩個帶有dif主題的指南,則子查詢將返回多行,並且不會進行更新。 我知道我可以用php循環解決此問題,但是我肯定必須有一種方法可以在查詢本身上進行處理,我希望能對此有所了解。

提前致謝

您可以先進行選擇計數,然后再加入以優化查詢速度:

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" 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM