情况
由于使用每个实体的各种情况,我有一个大量使用连接的数据库。这是一个简化的图表:
目标
无论是否设置了 user_has_module 中的“fk_chapter_id”,我都希望能够获取所有模块和“名称”字段的详细信息。
- 在“user_has_module.fk_chapter_id”为空的情况下,系统可以返回模块的详细信息,然后返回空章。
- 在有 user_has_module 的情况下,我想获取状态
问题
每当我执行 SQL 语句时,我只得到部分返回的结果。IE 如果我总共有 4 个模块记录,其中两个用户在“user_has_module”中有一个条目会完整返回这两个记录,然后是其他模块的 2 个空记录。
根据反馈更新,差不多了
现在,唯一的问题是我得到了重复。使用一些测试数据
SELECT DISTINCT
chapter_id,
chapter_name,
module_id,
module_name,
(null ) AS user_module_progress,
(SELECT COUNT(fk_chapter_id) FROM module_has_chapter WHERE fk_module_id = m.module_id) AS chapter_count
FROM
module as m
LEFT JOIN
module_has_chapter as mhc ON m.module_id = mhc.fk_module_id
LEFT JOIN
chapter as c ON mhc.fk_chapter_id = c.chapter_id
group by m.module_id
UNION
SELECT DISTINCT
chapter_id,
chapter_name,
module_id,
module_name,
user_module_progress,
(SELECT COUNT(fk_chapter_id) FROM module_has_chapter WHERE fk_module_id = m.module_id) AS chapter_count
FROM
module as m
LEFT JOIN
user_has_module as uhm ON m.module_id = uhm.fk_module_id
LEFT JOIN
user as u ON uhm.fk_user_id = u.user_id
LEFT JOIN
chapter as c ON uhm.fk_latest_chapter_id = c.chapter_id
WHERE u.user_id = 2
group by m.module_id;