次のフィールドを持つ単一のテーブル ( と呼ばれるdocuments) で作業しています: id、parent_id、およびstatus。フィールドは、同じテーブル内のparent_idフィールドを参照します。フィールドのタイプはidです。statusENUM('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私は私の友人かもしれないと感じていますが、意図した結果を得るためにそれをどのように使用するかわかりません.