我有两张桌子,我们称他们为会议和电话。它们都实现了一个“事件”界面,因此它们之间有共同的领域,如日期,主题,参与者等。
我想运行查询以在一个结果集中同时获取会议和电话,并按日期对其进行排序。这可能吗?
阅读的Thx!
答案 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
列的类型必须相同。 希望有所帮助。
编辑:添加了“类型”(会议/活动),以便您知道要搜索哪些表格以获取更多信息。