簡體   English   中英

MySQL子查詢和'NOT IN'

[英]MySQL sub-query AND 'NOT IN'

抱歉,如果以前已經回答過; 我有點不確定如何最好地描述這個問題,不要介意尋找它。 但是這里...

基本上,我有一個“項目”表,其中包含“ id”和“ title”。 我還有一個'projects_history'表,該表保存(IF)將項目設置為已歸檔(布爾值)時的信息。 它有一個引用該項目的“ pid”鍵-每個項目在更新時可以有多個記錄(以便跟蹤誰將值設置為什么)。

還有一個“ project_enquiries”表,其中包含有關已針對項目提出的查詢的信息,因此有一個“ pid”鍵引用了“ projects”。 同樣,有一個“ project_enquiry_history”表記錄(IF)何時將查詢設置為關閉(布爾值)。 它具有引用project_enquiry的“ eid”鍵-每個查詢在更新時都可以有多個記錄(以便跟蹤誰將值設置為什么)。

我的查詢旨在提取尚未歸檔的項目(因此,“ project_history”中沒有記錄,或者該項目的最新記錄具有“ archived” = 0),這些項目的查詢仍處於打開狀態(因此“ project_enquiry_history”中沒有記錄,或者查詢的最新記錄中“ open” = 1)。

我真的很難從哪里開始查詢。

第一件事是,如果project_history沒有記錄,那么您將需要使用您的項目ID在project_history表上對projects表進行left join ,以發現這一點。 結果中的條目將在project_history的列中為空,其中沒有相應的條目。 然后,您可以鏈接該過程,使用結果對'project_enquiry_history'進行另一個左聯接,以查找沒有條目的項目。

您也可以照常使用這些結果來選擇數據。

它看起來像:

SELECT * from project p LEFT OUTER JOIN project_history ph ON P.ID=ph.pid LEFT OUTER JOIN project_enquiry_history peh ON peh.ID=ph.pid WHERE (archived is NULL OR archived=0) AND (open is NULL OR open=1)

如果使用時間戳等,則可能必須進行調整以找到最新的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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