我有以下数据库结构:
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/

10-14 02:46