Mysql 数据不存在时另一个表的嵌套select MAX()

Mysql 数据不存在时另一个表的嵌套select MAX(),mysql,Mysql,我有三个表格:Post、Community和Community Moderator。我创建了一个SQL查询来显示用户主持的社区,包括创建日期和更新日期。更新日期根据该社区中帖子的最大创建日期计算 以下是适用于有帖子的社区的代码: SELECT c.id, c.title, c.created, p.created as 'postdate' FROM Post p, Community c, CommunityMod cm WHERE p.created in ( SEL

我有三个表格:Post、Community和Community Moderator。我创建了一个SQL查询来显示用户主持的社区,包括创建日期和更新日期。更新日期根据该社区中帖子的最大创建日期计算

以下是适用于有帖子的社区的代码:

SELECT c.id, c.title, c.created, p.created as 'postdate'
FROM Post p, Community c, CommunityMod cm
WHERE p.created in
    (
        SELECT MAX(created)
        FROM Post
        GROUP BY community
    )
AND cm.moderator=$id AND p.community=c.id AND cm.community=c.id
ORDER by c.created DESC
问题是,由于p.community中没有数据,因此此查询不会选择没有任何帖子的社区

我想它也显示没有任何帖子的社区,但它不会显示更新信息的p.created,也不会显示社区创建的日期c.created。
我该怎么做呢?

您需要对Post表使用左连接。请注意,Post表中列上的所有条件都应放在on子句中

SELECT ...
FROM Community c
JOIN CommunityMod cm ON cm.community = c.id
LEFT JOIN Post p
  ON  p.community = c.id
  AND p.created in
    (
        SELECT MAX(created)
        FROM Post
        GROUP BY community
    )
WHERE cm.moderator = $id
ORDER by c.created DESC
请注意,子查询可能无法按预期工作,ff Post.created不是唯一的。应将其更改为相关子查询:

SELECT ...
FROM Community c
JOIN CommunityMod cm ON cm.community = c.id
LEFT JOIN Post p
  ON  p.community = c.id
  AND p.created in
    (
        SELECT MAX(p1.created)
        FROM Post p1
        WHERE p1.community = c.id
    )
WHERE cm.moderator = $id
ORDER by c.created DESC
但是,如果您只需要从Post表中创建的值,那么您根本不需要子查询

SELECT c.id, c.title, c.created, MAX(p.created) as 'postdate'
FROM Community c
JOIN CommunityMod cm ON cm.community = c.id
LEFT JOIN Post p ON p.community = c.id
WHERE cm.moderator = $id
GROUP BY c.id
ORDER by c.created DESC

非常感谢。我意识到我在某种程度上遗漏了原始查询的SELECT语句,因此我将其重新编辑。我确实让你的问题起作用了。非常感谢你!如果你没有在任何地方使用CommunityMod,你为什么要加入它?因为我需要使用cm选择一个特定的版主。版主=$idMissed that-我的错。