我有一个具有属性的用户 User.id
我有一个对象 Object.id, Object.name
我有一个类别 Category.id, 分类名称, Category.user_id
我有一个关联表 category_id,object_id
用户HABTM对象
对象HABTM用户
类别属于1个用户
如何编写查询以返回所有对象的列表用户是否已将用户指定的类别分配给?请记住,另一个用户可能已将同一个对象分配给他们自己的类别。
答案 0 :(得分:2)
SELECT o.*
FROM Objects o
JOIN (
UsersObjects uo JOIN Users u ON (uo.user_id = u.id)
) ON (o.id = uo.object_id)
LEFT OUTER JOIN (
ObjectsCategories oc JOIN Categories c ON (oc.category_id = c.id)
) ON (o.id = oc.object_id AND c.user_id = u.id)
WHERE u.id = :userid AND oc.object_id IS NULL;
注意:我没有对此进行测试,您可以根据自己可能使用的ORM调整此语法。