无法找出此sql查询的错误

lvmkulzt  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(293)

试图从用户那里获取最新论坛帖子的列表,按发布日期排序。
问题是帖子分为主题和回复,所以如果最新的帖子不是主题本身,我需要从另一个表中获取回复文本。
尝试使用case在子查询(如果是回复)之间切换,否则使用主题文本。

SELECT
    t.`topic_id`,
    t.`topic_title`,
    t.`last_post_date`,
    t.`last_post_id`,
    CASE WHEN t.`replys` > 0 THEN (
    SELECT
        `reply_text` AS 'text'
    FROM
        `forum_replies`
    WHERE
        `post_id` = t.`last_post_id`
) ELSE t.`topic_text` AS 'text'
END
FROM
    `forum_topics` t
WHERE
    t.`approved` = 1 AND t.`forum_id` IN (1) AND t.last_post_user_id = 1
ORDER BY
    t.`last_post_date`
DESC
LIMIT 5

错误是:

1064-您的sql语法有错误;检查与mysql服务器版本相对应的手册,以获得正确的语法

“接近”作为“文本”结束于 forum_topics t其中t。 approved =1和t.`f',第13行

w8rqjzmb

w8rqjzmb1#

子查询在中的使用 CASE 不允许。使用 LEFT JOIN 取而代之的是:

SELECT
    t.`topic_id`,
    t.`topic_title`,
    t.`last_post_date`,
    t.`last_post_id`,
    t.`reply_text` as 'text'
FROM
    `forum_topics` t
    LEFT JOIN `forum_replies` r on r.`post_id` = t.`last_post_id`
WHERE
    t.`approved` = 1 AND t.`forum_id` IN (1) AND t.last_post_user_id = 1
ORDER BY
    t.`last_post_date`
DESC
LIMIT 5

相关问题