我有以下数据库结构:
File,User,FileRevision(对File有外键,通过中间表到User有多个-2-多个连接)。
我要获取所有文件修订版:
在相应的文件中是最新/最新的,
与执行搜索(权限检查)的用户有多个2多个链接。
我发现我可以通过执行如下操作来完成(1):
SELECT created_on, file_id FROM FileRevision
WHERE created_on = (SELECT MAX(created_on) FROM FileRevision
WHERE filed_id = file_id)
但我不知道如何同时执行m2m权限检查
最佳答案
这是“每组最大n”问题的一个变体。下面是我如何在没有子查询和GROUP BY
的情况下解决它:
SELECT f1.*
FROM Permissions p -- this is the many-to-many table
JOIN FileRevision f1
ON (f1.file_id = p.file_id)
LEFT OUTER JOIN FileRevision f2
ON (f2.file_id = p.file_id AND f1.created_on < f2.created_on)
WHERE p.user_id = ? AND f2.file_id IS NULL;
用所需的用户id替换“
?
”。关于sql - 不知道如何编写复杂的SQL查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1450891/