在这种情况下如何编写sql?

ncecgwcz  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(630)

表comment包含注解及其回复

CREATE TABLE `comment` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `comment` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
)

reply_to 哪个有 response_id 以及 comment_id 它们都是comment表中记录的id。

CREATE TABLE `reply_to` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `response_id` int(11) NOT NULL, 
  `comment_id` int(11) NOT NULL, 
  PRIMARY KEY (`id`)
)

如果表注解包含如下数据:

表reply\ to contains

预期结果如下:

问:如何使用左外连接显示所有评论及其回复?
这个问题出自这一页
评论和回复的数据库设计为什么下面的sql不能在这里工作?

SELECT c.comment, r.comment as reply
 FROM Comment c 
 LEFT OUTER JOIN Comment r on c.id = r.id  
 LEFT OUTER JOIN reply_to rt on rt.response_id = r.id
mrfwxfqh

mrfwxfqh1#

现在还不完全清楚您希望结果是什么样子,但是您链接到的帖子中的原始查询(带有ansi-89连接的查询)给出了我期望的结果:

所以我用适当的连接重写了这个查询,结果如下所示:

SELECT
    oc.comment,
    rc.comment
FROM
    comment oc
INNER JOIN
    reply_to r
    ON r.comment_id = oc.id
INNER JOIN
    comment rc
    ON r.response_id = rc.id

如果您想看到没有回复的评论:

然后可以像这样使用左外连接:

SELECT
    oc.comment,
    rc.comment
FROM
    comment oc
LEFT OUTER JOIN
    reply_to r
    ON r.comment_id = oc.id
LEFT OUTER JOIN
    comment rc
    ON r.response_id = rc.id

相关问题