gpt4 book ai didi

mysql - 如果第 1 行不存在,则检查并选择第 2 行 mysql

转载 作者:行者123 更新时间:2023-11-29 21:05:18 25 4
gpt4 key购买 nike

我有 1 个包含名称和语言列的表。

假设我有 2 种语言,id 为 1 和 2,我想选择所有语言 = 2 的名称,如果任何行在语言 = 2 中不可用,那么我将选择语言 1 的行。仅获取如果语言 = 2 不可用,则语言 = 1 的行

ID language name(as code)
1 1 name_1
2 2 name_1
3 1 name_2

我想要得到这样的东西:

ID language name
1 2 name_1
3 1 name_2

感谢您的帮助。对不起我的英语

最佳答案

这是一个优先级查询。这是一种非常快的方法(特别是使用正确的索引):

select t.*
from t
where language = 2
union all
select t.*
from t
where language = 1 and
not exists (select 1 from t t2 where t2.language = 1 and t2.name = t.name);

对于超过 2 种语言,这会变得很麻烦。为此,您可以使用 order by 和变量:

select t.*
from (select t.*,
(@rn := if(@n = name, @rn + 1,
if(@n := name, 1, 1)
)
) as rn
from t cross join
(select @n := '', @rn := 0) params
order by t.name,
(case when language = 2 then 1 else 2 end)
) t
where rn = 1;

您只需调整 order by 子句即可将语言按照您想要的优先顺序排列。

关于mysql - 如果第 1 行不存在,则检查并选择第 2 行 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36870090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com