我有两个使用UNION
的SQL查询。
SELECT
studentID
FROM
Student
UNION
SELECT
courseName
FROM
Course;
如果我想按courseName
订购结果,我该怎么做?
如果我尝试以下操作,则会给我错误。
SELECT
studentID
FROM
Student
UNION
SELECT
courseName
FROM
Course
ORDER BY
courseName ;
答案 0 :(得分:2)
首先,两个列必须在统一SELECT
中相同。我不确定,但在您的情况下看起来不像(studentID
和courseName
- 听起来像NUMBER
和VARCHAR
)。
但是,如果是这种情况,只需将其作为子选择并对结果进行排序:
SELECT *
FROM (SELECT studentID AS col
FROM Student
UNION
SELECT courseName AS col
FROM Course)
ORDER BY col;
p.s。正如Stephan所指出的那样,你不需要这里的子选择:
SELECT studentID AS col
FROM Student
UNION
SELECT courseName AS col
FROM Course
ORDER BY col;
这是UNION工作方式的原因。
p.p.s。在此处查看一些小提琴:ORACLE和MySQL。
请注意:AS
是MySQL的典型代表。如果你使用ORACLE删除它。
干杯!
答案 1 :(得分:1)
你可以试试这个:
SELECT
'student_id' as type,
studentID as value
FROM
Student
UNION
SELECT
'course_name' as type,
courseName as value
FROM
Course
ORDER BY
type,
value
但是请记住,正如Trinimon所指出的那样,在值列中,您将只有字符串(studentID将转换为字符串)
答案 2 :(得分:0)
首先打破查询,这样就不会出错:
SELECT
studentID
FROM
Student
SELECT
courseName
FROM
Course
第一部分给出一个id,它是一个整数或guid,第二部分给出一个字符串
union运算符组合了两个具有相同列类型的查询。
你可能想要的是一个加入。看这里http://www.w3schools.com/sql/sql_join.asp和http://www.w3schools.com/sql/sql_union.asp