gpt4 book ai didi

mysql - 使用 MAX 函数时从表中获取字段

转载 作者:行者123 更新时间:2023-11-29 07:28:52 24 4
gpt4 key购买 nike

我有以下运行良好的 MySQL 语句。

SELECT c.id, IFNULL(MAX(l.id), 0) as level_id
FROM course c
LEFT JOIN level l ON c.level_id = l.id
WHERE c.user_id = '123'
GROUP BY c.id

一门类(class)可以有多个级别,因此 IFNULL(MAX(l.id), 0) 通过选择最高级别来工作。

但是,我不想返回最高级别的 id,而是想获取名称。我尝试了以下方法,但 MySQL 不喜欢使用选择中的值进行连接。

SELECT c.id, IFNULL(MAX(l.id), 0) as level_id, l2.name
FROM course c
LEFT JOIN level l ON c.level_id = l.id
INNER JOIN level l2 ON level_id = l2.id
WHERE c.user_id = '123'
GROUP BY c.id

我简化了问题中的陈述(为了便于阅读),所以希望问题仍然有意义。

最佳答案

对于这种类型的查询,我认为最简单的方法是 substring_index()/group_concat() 技巧:

SELECT c.id, COALESCE(MAX(l.id), 0) as level_id,
SUBSTRING_INDEX(GROUP_CONCAT(l2.name ORDER BY l.id DESC), ',', 1) as name
FROM course c LEFT JOIN
level l
ON c.level_id = l.id INNER JOIN
level l2
ON level_id = l2.id
WHERE c.user_id = '123'
GROUP BY c.id;

请注意,WHERE 在您的查询中放错了位置。

此方法的注意事项:

  • 如果 name 可能包含逗号,则需要使用不同的分隔符。
  • group_concat() 中间结果的长度存在内部限制。如果这是一个问题,可以增加长度。

关于mysql - 使用 MAX 函数时从表中获取字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33498669/

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