显示多对多最重要的一个

问题描述 投票:0回答:1

这可能在某个地方有答案,但我什至不知道如何搜索。

我有多对多的关系,我想与“最重要的”一对多显示。例如,此查询

SELECT Country.CountryName, FlagColor.Color FROM Country JOIN FlagColor USING (CountryID) WHERE ...;

将返回

CountryName  |  Color

  Ireland    |  Green
  Ireland    |  Orange
  Ireland    |  White
   Italy     |  Green
   Italy     |   Red
   Italy     |  White
    USA      |  Blue
    USA      |   Red
    USA      |  White

我知道GROUP BY可以将每种颜色限制为一种颜色,但是可以是其中任何一种。我确定蓝色是最上面的颜色,然后是红色,然后是绿色。所以我想修改上面的查询返回

CountryName  |  Color

  Ireland    |  Green
   Italy     |   Red
    USA      |  Blue

我该怎么做?如果相关,我正在使用MySQL 5.7。

mysql sql many-to-many
1个回答
0
投票
select CountryName, Color from ( SELECT Country.CountryName, FlagColor.Color, row_number() over(order by case when FlagColor.Color = 'Blue' then 1 else 2 end) as rn FROM Country JOIN FlagColor USING (CountryID) WHERE ... ) x where rn = 1
© www.soinside.com 2019 - 2024. All rights reserved.