2013-05-10 3 views
0

У меня есть два SQL-запроса, которые используют UNION.SQL Order По вопросу с UNION

SELECT 
    studentID 
FROM 
    Student 

UNION 

SELECT 
    courseName 
FROM 
    Course; 

Если я хочу заказать результат по courseName, как я могу это сделать?

Если я попробую следующее, это даст мне ошибку.

SELECT 
    studentID 
FROM 
    Student 

UNION 

SELECT 
    courseName 
FROM 
    Course 
ORDER BY 
    courseName ; 
+1

ли студенты, изучающие друг друга? В противном случае это должно быть глупостью! И это не ошибка. – Strawberry

ответ

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., как Стефан указал правильно вам не нужно суб выбрать здесь:

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, удалите его.

Cheers!

+0

+1, но нет необходимости в таблице tmp, так как вы могли добавить 'ORDER BY col' в конце' UNION' – Stephan

+0

Хороший улов, не знал об этом и улучшил его. Благодаря! – Trinimon

+0

no worries mate :) – Stephan

0

Первый разбить запрос таким образом это не дает ошибку:

SELECT 
    studentID 
FROM 
    Student 


SELECT 
    courseName 
FROM 
    Course 

Первая часть дать идентификатор, который представляет собой целое число, или GUID, второй дает строку

Оператор объединения объединяет два запроса с одинаковыми типами столбцов.

Возможно, вы хотите присоединиться. смотрите здесь http://www.w3schools.com/sql/sql_join.asp и здесь http://www.w3schools.com/sql/sql_union.asp

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 будут преобразованы в строки)

+0

+1 Это интересная идея. У вас есть '' 'after' Course' - этого не должно быть. BTW неявное преобразование типов не будет работать для ORACLE (требуется TO_CHAR (..) 'вместо этого) – Trinimon

+0

Thx, я удалил'; 'Я не очень хорошо знаком с ORACLE, поэтому я буду считать ваше слово как должное: D, но в mysql преобразование по умолчанию выполняется по типу, который может вместить оба типа (строка в этом случае) – Stephan

+0

Да, сделано несколько небольших скрипков: http://sqlfiddle.com/#!4/9b9b8/2 и http://sqlfiddle.com/#!2/c2a14/2 – Trinimon

Смежные вопросы