SQL: можно ли отсортировать результирующий набор по 1 из 2 столбцов? - PullRequest
2 голосов
/ 26 января 2012

У меня есть два стола, давайте называть их собраниями и телефонными звонками. Они оба реализуют интерфейс «события» и поэтому имеют общие поля между ними, такие как дата, тема, участники и т. Д. И т. Д.

Я хотел бы выполнить запрос, чтобы получить как собрания, так и телефонные звонки в одном наборе результатов, и отсортировать их по дате. Это возможно?

Спасибо за чтение!

Ответы [ 4 ]

3 голосов
/ 26 января 2012

Что-то вроде следующего должно показаться вам правильным (обратите внимание, что оно основано на TSQL, но должно быть аналогичным / таким же для mysql). Вы можете включать разные столбцы из каждой таблицы и указывать NULL в качестве значения столбца для другой таблицы и наоборот.

SELECT EventDate
    , EventSubject
    , Particpants
    , DifferentMeetingsColumn
    , NULL AS DifferentPhoneCallsColumn
FROM Meetings
UNION ALL
SELECT EventDate
    , EventSubject
    , Participants
    , NULL AS DifferentMeetingsColumn
    , DifferentPhoneCallsColumn
FROM PhoneCalls
ORDER BY EventDate
3 голосов
/ 26 января 2012

Вы можете сделать это:

(select time, subject from meetings
union all
select time, subject from phonecalls)
)
order by time

Кроме того, вы можете сопоставить два класса с тремя таблицами:

create table events ( -- common columns go here
    event_id bigint
,   event_time datetime
,   event_subject varchar(max)
)

create table phone_calls (
    event_id bigint
,   phone_number varchar(24)
)

create table meetings (
    event_id bigint
,   location varchar(max)
)

Таким образом, все общие данные окажутся в одной таблице,Чтение будет немного сложнее, потому что вам нужно будет присоединиться к таблице событий, чтобы получить общие поля.В любом случае, у каждой альтернативы есть свои плюсы и минусы, выбор за вами.

3 голосов
/ 26 января 2012

Да

select commonFields
from events
join meetings

union all

select commonFields
from events
join calls

order by date

Это псевдокод, но вы можете заставить его работать.

2 голосов
/ 26 января 2012

Да.

Таблица:

Meeting: m_id, m_date, m_subject
Event: e_id, e_date, e_subject


( SELECT m_id,m_date,m_subject,'meeting' FROM meeting
  UNION ALL
  SELECT eid,e_date,e_subject,'event' FROM event ) ORDER BY 2

Типы столбцов должны быть одинаковыми. Надеюсь, это поможет.

Редактировать: добавлен тип (встреча / событие), чтобы вы знали, в какой таблице искать дополнительную информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...