gpt4 book ai didi

MySQL 连接,其中一个值可以是可选的

转载 作者:行者123 更新时间:2023-11-30 01:24:23 25 4
gpt4 key购买 nike

情况

由于使用每个实体的各种情况,我有一个大量使用联接的数据库。这是一个简化的图表:

MySQL Diagram

目标

我希望能够获取所有模块和“名称”字段的详细信息,无论 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;

results

最佳答案

我最终到达了那里,但并不是特别高兴。这可行,但是,这是一团糟......有人有更好的解决方案吗?

SELECT DISTINCT
(null) AS chapter_id,
(null) AS 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
user_has_module as uhm ON m.module_id = uhm.fk_module_id
WHERE
uhm.fk_user_id IS NULL

UNION ALL

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
INNER JOIN
user as u ON uhm.fk_user_id = u.user_id
INNER JOIN
chapter as c ON uhm.fk_latest_chapter_id = c.chapter_id
WHERE
u.user_id = 2;

result set 2

关于MySQL 连接,其中一个值可以是可选的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18182778/

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