SQL订单与UNION的问题

时间:2013-05-10 08:46:55

标签: sql-order-by union

我有两个使用UNION的SQL查询。

SELECT 
   studentID 
FROM 
   Student 

UNION 

SELECT 
   courseName 
FROM 
   Course;  

如果我想按courseName订购结果,我该怎么做?

如果我尝试以下操作,则会给我错误。

SELECT 
  studentID 
FROM 
  Student 

UNION 

SELECT 
  courseName 
FROM 
  Course 
ORDER BY 
  courseName ;

3 个答案:

答案 0 :(得分:2)

首先,两个列必须在统一SELECT中相同。我不确定,但在您的情况下看起来不像(studentIDcourseName - 听起来像NUMBERVARCHAR)。

但是,如果是这种情况,只需将其作为子选择并对结果进行排序:

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。在此处查看一些小提琴:ORACLEMySQL

请注意: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.asphttp://www.w3schools.com/sql/sql_union.asp