[英]MySQL query nested where condition
在我的数据库中,有四种类型的个人, youngOrc
, oldOrc
, youngHuman
, oldHuman
。
个人属于以日期范围为条件的类型。 因此,对于每种类型,我都有这样的表:
youngOrcList ------------------- individual_id, start_date, end_date
这意味着,这个家伙individual_id
是youngOrc
的开始和结束日期之间。 他可能不在这个范围内。 同样,我有一张youngHuman
桌子。
现在,我要过滤的真正感兴趣的表是事件:
events ------------------ source_individual_id target_individual_id event_date
事件表记录了我领域中两个人之间的所有事件。 我想要过滤,以便只选择youngOrc
和youngHuman
之间的events
。
因此,这是一个“嵌套”条件,在该条件下,我同时需要events.source_individual_id IN youngOrcList
和events.event_date BETWEEN youngOrcList.start_date AND youngOrcList.end_date
。 如何使这项工作?
(此外,关于更好的标题的任何建议都会很棒。我什至不知道该怎么称呼,因此无法有效地使用Google。)
这将为您提供youngOrc和youngHuman之间的所有事件:
SELECT *
FROM
Events e
WHERE EXISTS (
SELECT * FROM youngHumanList
WHERE individual_id IN (e.source_individual_id, e.target_individual_id)
AND e.event_date BETWEEN start_date AND end_date)
AND EXISTS (
SELECT * FROM youngOrcList
WHERE individual_id IN (e.source_individual_id, e.target_individual_id)
AND e.event_date BETWEEN start_date AND end_date)
您可以在表上使用联接。 他们可以在现场参加individual_id
所以后来离开的唯一条件WHERE
子句将日期条件:
SELECT *
FROM youngOrcList AS o
JOIN events AS e ON e.source_individual_id = o.individual_id
JOIN youngHumanList AS h ON h.individual_id = e.target_individual_id
WHERE e.event_date BETWEEN o.start_date AND o.end_date
AND e.event_date BETWEEN h.start_date AND h.end_date
另外, WHERE
条件可以是:
WHERE e.event_date > MAX(o.start_date, h.start_date)
AND e.event_date < MIN(o.end_date, h.end_date)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.