[英]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.