了解别名和表,SQL

时间:2013-05-30 18:34:10

标签: sql select aliasing

我正在尝试输出表,其中每一行代表一个线程中的帖子,而这些列将线程细分为问题,答案和注释。我有问题和答案部分,现在我需要添加评论部分。

我正在尝试理解我给出的解决方案,以便使用代码并为评论者添加第三列。粘贴的代码从学生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';

问题:

  1. 什么是s1,什么是s2,这些是如何工作的?他们是临时桌子还是什么?

  2. 如何为评论员添加第三列?这是我尝试生成第三列的可悲尝试:

    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';
    

1 个答案:

答案 0 :(得分:1)

别名允许您将列名和表名重命名为您选择的任何内容。 s1和s2都引用了同一个表“学生”。这是一个描述如何使用别名SQL-Alias (w3schools)的链接。请参阅“表的别名示例”

您的朋友使用子查询并从同一学生表中选择,以便找到回答问题的人。您添加评论者的策略是有效的。我创建了一个SQL Fiddle来证明这是有效的,可以使用它来进一步自定义结果。