次のフィールドを持つ単一のテーブル ( と呼ばれる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
私は私の友人かもしれないと感じていますが、意図した結果を得るためにそれをどのように使用するかわかりません.