MySQL,找到另一个匹配参数的双行

时间:2017-06-28 09:14:40

标签: mysql sql

我有一张桌子,我不断添加有关图片的信息。如果某个类别中的图片是我有史以来最好的,我希望它代表该类别。由于我添加了许多图片,我很难删除所有旧的“最佳图片标记”,并希望以更好的方式找到它们。我已经搜索过但从未真正找到解决方案,所以我一直在滚动浏览我的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问题就很难处理这个问题。 :-)

提前致谢!

3 个答案:

答案 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)的索引,在大多数情况下,这应该是性能最佳的解决方案。