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

时间:2018-10-15 14:19:01

标签: mysql sql

表格评论包含评论及其回复

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

具有reply_toresponse_id的表comment_id 这两个都是注释表中记录的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`)
)  

如果表注释具有如下数据:
enter image description here

表reply_to包含
enter image description here

预期结果如:
enter image description here

问题:如何使用左外部联接显示所有评论及其回复?

此问题从此页面出现

  

Database design for comments and replies   为什么下面的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

1 个答案:

答案 0 :(得分:1)

仍然不清楚您想要的结果是什么样子,但是链接到该帖子的原始查询(带有ANSI-89的查询)给出了我期望的结果:

enter image description here

因此,我使用适当的联接重写了该查询,看起来像这样:

var tmpStr = "This is an example of animal : - Cat - Dog - Bird".replacingOccurrences(of: "-", with: "\n-")
yourLabel.text = tmpStr
yourLabel.numberOfLines = 0
yourLabel.lineBreakMode = .byWordWrapping

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

enter image description here

然后您可以使用左外部联接,如下所示:

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