SQL:结果集可以根据2列中的1列进行排序吗?

时间:2012-01-25 21:59:18

标签: mysql sql

我有两张桌子,我们称他们为会议和电话。它们都实现了一个“事件”界面,因此它们之间有共同的领域,如日期,主题,参与者等。

我想运行查询以在一个结果集中同时获取会议和电话,并按日期对其进行排序。这可能吗?

阅读的Thx!

4 个答案:

答案 0 :(得分:3)

是:

select commonFields
from events
join meetings

union all

select commonFields
from events
join calls

order by date

这是伪代码,但你可以使它工作。

答案 1 :(得分:3)

你可以这样做:

(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)
)

这样,所有常见数据都将在同一个表中结束。读取会有点复杂,因为您需要加入事件表以获取公共字段。无论如何,每种选择都有优点和缺点,选择取决于你。

答案 2 :(得分:3)

以下内容应该看得出来(注意这是基于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 :(得分:2)

表:

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

列的类型必须相同。 希望有所帮助。

编辑:添加了“类型”(会议/活动),以便您知道要搜索哪些表格以获取更多信息。