【发布时间】:2015-11-03 12:03:33
【问题描述】:
我有以下运行良好的 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
一门课程可以有多个级别,因此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
我已经简化了我在问题中的陈述(为了便于阅读),所以希望这个问题仍然有意义。
【问题讨论】:
-
第一个查询应该给您一个错误,因为您在 JOIN 中间有一个 WHERE 子句(代码看起来与您的第二个查询相同)。
-
@Kickstart 感谢您的发现,更新了我的问题