我正在尝试输出表,其中每一行代表一个线程中的帖子,而这些列将线程细分为问题,答案和注释。我有问题和答案部分,现在我需要添加评论部分。
我正在尝试理解我给出的解决方案,以便使用代码并为评论者添加第三列。粘贴的代码从学生ID的一列创建两列。第一列是发布问题的所有学生,第二列是在给定帖子中发布答案的所有学生。
表格查询:
thread_id student_usrnm post_type
1 iron_man question
1 orient answer
1 cyclops comment
2 green_lantern question
2 iron_man answer
... .... .....
输出:
questioners answerers commenters
iron_man orient cyclops
green_lantern iron_man
以下是适用于生成提问者和回答者的代码:
SELECT s1.author_id AS questioner,
(SELECT group_concat(DISTINCT author_id SEPARATOR " ") FROM students s2 WHERE s2.post_type = 'answer' AND s2.thread_id = s1.thread_id) AS answerers
FROM students s1
WHERE s1.post_type = 'question';
问题:
什么是s1,什么是s2,这些是如何工作的?他们是临时桌子还是什么?
如何为评论员添加第三列?这是我尝试生成第三列的可悲尝试:
SELECT s1.author_id AS questioner,
(SELECT group_concat(DISTINCT author_id SEPARATOR " ")
FROM students s2 WHERE s2.post_type = 'answer' AND s2.thread_id = s1.thread_id) AS answerers,
(SELECT group_concat(DISTINCT author_id SEPARATOR " ") FROM students s3 WHERE s3.post_type = 'comment' and s3.thread_id = s1.thread_id) AS commenters,
FROM students s1
WHERE s1.post_type = 'question';
答案 0 :(得分:1)
别名允许您将列名和表名重命名为您选择的任何内容。 s1和s2都引用了同一个表“学生”。这是一个描述如何使用别名SQL-Alias (w3schools)的链接。请参阅“表的别名示例”
您的朋友使用子查询并从同一学生表中选择,以便找到回答问题的人。您添加评论者的策略是有效的。我创建了一个SQL Fiddle来证明这是有效的,可以使用它来进一步自定义结果。