我有两个表,第一个带有指南名称,章节和主题的列表,随着时间的推移,当添加新指南时,有或没有相同的名称,我们称之为“指南”,类似于:
|---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循环来解决这个问题,但我确定必须有一种方法来处理查询本身,我会很感激这一点。
提前致谢
答案 0 :(得分:2)
您可以先执行选择计数,然后再加入以优化查询速度:
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"