簡體   English   中英

MySQL查詢嵌套在哪里條件

[英]MySQL query nested where condition

在我的數據庫中,有四種類型的個人, youngOrcoldOrcyoungHumanoldHuman

個人屬於以日期范圍為條件的類型。 因此,對於每種類型,我都有這樣的表:

youngOrcList
-------------------
individual_id, 
start_date, 
end_date

這意味着,這個家伙individual_idyoungOrc的開始和結束日期之間。 他可能不在這個范圍內。 同樣,我有一張youngHuman桌子。

現在,我要過濾的真正感興趣的表是事件:

events
------------------
source_individual_id
target_individual_id
event_date

事件表記錄了我領域中兩個人之間的所有事件。 我想要過濾,以便只選擇youngOrcyoungHuman之間的events

因此,這是一個“嵌套”條件,在該條件下,我同時需要events.source_individual_id IN youngOrcListevents.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM