道歉有点令人困惑的标题。用几句话来概括这个问题很难。我正在向数据库发出请求,如下表所示:
Event
:
ID, startdate, offtime, meetingid reason
Meeting
:
ID, description
cm_delay_reasons
:
ID, reasoncode, reasondescription
返回的元组需要符合以下条件:
MeetingID
中的Event
需要映射到ID
中的Meeting
。reason
中的Event
值不能为空reason
中的Event
值可以映射到reasoncode
中的cm_delay_reasons
。
reason
值也不能映射,但不能为空。原因是后者很简单。 Event.Reason
可以是代码,表示它与我们为事件预先配置的延迟之一匹配。它也可以是明文,表明用户决定了他们自己的延迟原因。目的是获得这两者,对于那些没有映射的值,将原因描述留空。
我提出的SQL查询是:
select
m.description, e.startdate, e.offtime, e.reason, d.reasondescription
from
event e, meeting m, cm_delay_reasons d
where
e.meetingid = m.id
and (d.reasoncode = e.reason);
但是,它并没有显示用户可以放入的自定义原因。只有cm_delay_reasons
表中存在的预定义原因,所以我改变了机智并试图:
select
m.description, e.startdate, e.offtime, e.reason, d.reasondescription
from
event e, meeting m, cm_delay_reasons d
where
e.meetingid = m.id
and (e.reason is not null);
然而,这会造成重复。我需要解决的是如何结合两者的功能。
答案 0 :(得分:0)
在我经验丰富的同事看到我遇难后,他帮助我,并解释了左外连接的概念。
SELECT m.description, e.startdate, e.offtime, e.reason, d.reasondescription
FROM event e
JOIN meeting m ON e.meetingid = m.id
LEFT OUTER JOIN cm_delay_reasons d ON e.reason = d.reasoncode
WHERE e.reason IS NOT NULL
ORDER BY e.startdate;