我正在使用具有以下字段的单个表(称为 documents
):id
、parent_id
和 status
。 parent_id
字段引用同一张表中的id
字段。 status
字段的类型为 ENUM('submitted', 'accepted', 'rejected')
。
我想选择所有 documents
no children where 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
可能是我的 friend ,但我不知道如何使用它来获得预期的结果。
最佳答案
SELECT DISTINCT `documents`.*
FROM (`documents`)
LEFT OUTER JOIN `documents` children_documents
ON `documents`.`id` = `children_documents`.`parent_id`
AND `children_documents`.`status` = 'accepted'
WHERE `children_documents`.`parent_id` IS NULL
关于mysql - 选择所有 child 都满足条件的 self 关系中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12082353/