需要SQL帮助

需要SQL帮助,sql,Sql,我有一个问题问: 列出大学学生、大学入学和大学课程中存储的所有数据。编写一个查询,使所有列在输出中只出现一次,行按学生的名字升序和课程id降序排序,以便学生按课程分组(不使用group by子句),并且生成的名字/姓氏(fname..,Lname…)不会出现在输出中 我目前的代码是: SELECT * FROM DA_STUDENTS FULL JOIN DA_ENROLMENTS ON student_id = student_student_id FULL JOIN DA_

我有一个问题问:

列出大学学生、大学入学和大学课程中存储的所有数据。编写一个查询,使所有列在输出中只出现一次,行按学生的名字升序和课程id降序排序,以便学生按课程分组(不使用group by子句),并且生成的名字/姓氏(fname..,Lname…)不会出现在输出中

我目前的代码是:

SELECT *
FROM DA_STUDENTS
    FULL JOIN DA_ENROLMENTS ON student_id = student_student_id 
    FULL JOIN DA_COURSES ON course_course_id = course_id
ORDER BY first_name ASC, course_id DESC;

有什么帮助吗?

首先:排序的事情没有很好的解释。它甚至看起来像是缩进来混淆的。按照学生姓名和课程进行排序,但最终按照课程对学生进行分组,这仅仅意味着按照课程进行排序,然后再按照学生进行排序

然后:“生成的名字/姓氏……不显示在输出中”。什么它们是如何产生的?它们不是学生表中的简单列吗?至于是否在输出中显示某些内容:请说明您希望在SELECT子句中显示的内容。当然,其他列将不会显示

至于“列一份存储在da_学生、da_入学和da_课程中的所有数据列表”:这意味着所有学生、所有课程以及相关的入学:

from da_students s
cross join da_courses c
left join da_enrolments e on e.student_id = s.student_id and e.course_id = c.course_id
至于“编写一个查询,使所有列在输出中只出现一次”:这意味着,不要

select *
也不是

但只是

select s.student_id, ...

以便只显示一次学生ID。

您的查询有什么问题?奇数列名称。。。如果可能,请使用相同的名称,使用表别名等,例如,从DA_学生的完全加入DA_注册e ON s.student_id=e.student_idI尝试过,但仍然无效!:/Jens,它没有合并列,我无法删除fname和lname数据!即使asterix*对于快速测试查询很有用,但它通常被认为是不好的做法。只需列出您希望查询返回的列的名称(jarlh提到的别名可以帮助您实现这一点),这样您就可以从选择s.[first_name],c.[course_id]这样的内容开始
select s.student_id, ...