[英]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.