我正在使用一個表(稱爲documents
),其中包含以下字段:id
,parent_id
和status
。 parent_id
字段指的是同一個表中的id
字段。 status
字段的類型爲ENUM('submitted', 'accepted', 'rejected')
。選擇所有孩子都符合條件的自我關係中的行
我想選擇所有documents
有沒有孩子在哪裏status = 'accepted'
。
我第一次嘗試是這樣的:
SELECT DISTINCT `documents`.*
FROM (`documents`)
LEFT OUTER JOIN `documents` children_documents
ON `documents`.`id` = `children_documents`.`parent_id`
WHERE `children_documents`.`id` IS NULL
OR `children_documents`.`status` != 'accepted'
這樣做的問題是,既接受和孩子們接受的文件仍然會選擇。沒有任何文件接受的孩子應該被選中。
我有一種感覺GROUP BY
可能是我的朋友,但我無法弄清楚我將如何使用它來獲得預期的結果。
如果我理解正確,最後一行也可以檢查''children_documents'。'id''。你是一個更優雅的解決方案,所以我將其標記爲已接受。不幸的是,如果我的ORM庫不支持多個「ON」條件,我最終可能不會使用它。 –
是的,在左外連接中,當表中沒有匹配的表時,表中的所有列都將爲NULL,因此您可以檢查它們中的任何一個。作爲一種個人風格,我喜歡使用連接條件中提到的那種。否則,你必須留意可能包含顯式NULL的列。 – Barmar