【发布时间】:2012-08-22 22:37:54
【问题描述】:
我正在使用具有以下字段的单个表(称为 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 可能是我的朋友,但我不知道如何使用它来获得预期的结果。
【问题讨论】:
标签: mysql sql join tree self-join