0

我有两个使用UNION.

SELECT 
   studentID 
FROM 
   Student 

UNION 

SELECT 
   courseName 
FROM 
   Course;  

如果我想按 排序结果courseName,我该怎么做?

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

SELECT 
  studentID 
FROM 
  Student 

UNION 

SELECT 
  courseName 
FROM 
  Course 
ORDER BY 
  courseName ;
4

3 回答 3

2

首先,两个统一的列必须相同SELECT。我不确定,但在你的情况下看起来不像(因为studentIDand courseName- 听起来像NUMBERand VARCHAR)。

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

SELECT * 
  FROM (SELECT studentID AS col
          FROM Student 
         UNION 
        SELECT courseName AS col
          FROM Course)
 ORDER BY col;

ps正如Stephan正确指出的那样,您不需要此处的子选择:

SELECT studentID AS col
  FROM Student 
 UNION 
SELECT courseName AS col
  FROM Course                                
 ORDER BY col;

原因是 UNION 的工作方式。

pps在这里看到一些小提琴:ORACLEMySQL

请注意:AS对于 MySQL 来说是典型的。如果您使用 ORACLE,请将其删除。

干杯!

于 2013-05-10T09:04:41.013 回答
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 指出的那样,在 value 列上,您将只有字符串(studentID 将转换为字符串)

于 2013-05-10T09:06:25.053 回答
0

首先分解查询,这样它就不会出错:

SELECT 
    studentID
FROM
    Student


SELECT 
    courseName 
FROM 
    Course 

第一部分给出一个 id,它是一个整数或 guid,第二部分给出一个字符串

联合运算符将两个具有相同列类型的查询组合在一起。

你可能想要的是一个 JOIN。看这里http://www.w3schools.com/sql/sql_join.asp和这里http://www.w3schools.com/sql/sql_union.asp

于 2013-05-10T08:55:42.380 回答