【发布时间】:2014-03-03 10:30:41
【问题描述】:
我有一个文档权限表,我希望为用户选择一页文档。
问题是,一个用户可以通过多个组被允许访问一个文档,因此我们可能有多个X records for X documents 供用户使用。
我尝试使用子查询进行分页,但 MySQL 不喜欢 LIMIT in the subquery。
我面临两个主要选择:
SELECT perm.* FROM (SELECT DISTINCT document_id FROM permissions WHERE .... LIMIT...) ids INNER JOIN (SELECT fields FROM permissions WHERE ....) perms ON ids.document_id = perms.document_id-
使用 Java 进行连接 - 首先读取文档 ID,然后在如下查询中使用它们:
SELECT fields FROM permissions WHERE .... AND document_id IN([specific document_ids previously read])
什么会更有效率?
【问题讨论】:
-
你想找到这个answer可能对你有帮助。
-
MySQL 不喜欢子查询,也不喜欢你给它设置限制。限制本身是特定于数据库的,因此它不是标准。您可以使用 setMaxResults 作为替代方案。
-
修改您的查询,它可以相当简单。您确定需要查询 SAME 表两次吗?您应该能够在一个
SELECT中应用所有WHERE条件