我有一张桌子,我不断添加有关图片的信息。如果某个类别中的图片是我有史以来最好的,我希望它代表该类别。由于我添加了许多图片,我很难删除所有旧的“最佳图片标记”,并希望以更好的方式找到它们。我已经搜索过但从未真正找到解决方案,所以我一直在滚动浏览我的500多个类别以找到双打。
ID Category Best_pic
1 A no
2 B no
3 C no
4 A yes
5 B yes
6 C no
7 A yes
8 B yes
9 C yes
所以我希望我的搜索返回行4,5,7和8,列Best_pic为Yes的所有行,并且列Category中的值不止一行。
我真的希望我说清楚,我已经有这个问题好几年了,但是图片往往很多,如果没有正确的sql问题就很难处理这个问题。 :-)
提前致谢!
答案 0 :(得分:0)
您可以尝试以下解决方案:
SELECT *
FROM table_name
WHERE Category IN (
SELECT Category
FROM table_name
WHERE Best_pic = 'yes'
GROUP BY Category
HAVING COUNT(ID) > 1
)x AND Best_pic = 'yes'
答案 1 :(得分:0)
从test t JOIN中选择t。*( 从test中选择cat_id,其中flag =' yes'具有count(id)> 1的cat_id分组 )作为ON a.cat_id = t.cat_id,其中t.flag ='是'
答案 2 :(得分:0)
我会这样做:
select t.*
from t
where t.best_pic = 'yes' and
exists (select 1
from t t2
where t2.category = t.category and
t2.best_pic = t.best_pic and
t2.id <> t.id
);
对于t(best_pic, category, id)
的索引,在大多数情况下,这应该是性能最佳的解决方案。