我真的被困在如何创建适当的选择语句,并希望您能提供任何指导。
我创建了一个迷你文档管理系统,允许用户上传文件并按类别对这些文件进行分类。每个文件可以选择一个或多个类别。以下是我的表格:
表:文件(pKey(主键),file_name,file_description,file_path)
pKey file_name file_description file_path
1 IT001.DOC Network Design Document /common/it/
2 IT002.DOC Desktop Standards /common/it/
3 IT003.DOC Laptop Standards /common/it/
此外还有其他部门来自IT部门,因此路径字段也会发生变化(我以为我会把这些数据丢进去)
表:类别(pKey(主键),category_description)
pKey category_description
1 Central Missouri Campus
2 Eastern Missouri Campus
3 Western Missouri Campus
4 Desktops
5 Laptops
6 Networks
7 Printers
当然还有其他类别,这只是一个抽样
表:category_xref(pKey(主键),fk_file_id,fk_category_id)
pKey fk_file_id fk_category_id
1 1 1
2 1 2
3 1 6
4 2 2
5 2 3
6 2 4
7 3 1
8 3 2
9 3 3
10 3 5
当用户搜索相关文档时,会向他们显示带有“类别”复选框的表单。通过选择Central,它们将获得所有已标记为Central的文件。通过选择桌面,他们可以获得任何已标记为桌面的文档。但是,当他们选择中央和桌面时,他们会获得任何中央或桌面文档。我需要弄清楚如何只获取那些中央和桌面文件以及他们选择的任何其他复选框,并排除任何不包含所有复选框的文件。
SELECT f.pkID, f.file_name, f.file_description, f.file_path, cox.fk_category_id
FROM files f
JOIN category_xref cox ON cox.fk_file_id = f.pkID
WHERE cox.fk_category_id IN (59, 69)
ORDER BY f.file_name ASC, cox.fk_category_id ASC
答案 0 :(得分:1)
最简单的方法可能是:
SELECT f.pkID, f.file_name, f.file_description, f.file_path
FROM files f
JOIN category_xref cox ON cox.fk_file_id = f.pkID
WHERE cox.fk_category_id IN (59, 69)
GROUP BY f.pkID
HAVING count(distinct cox.fk_category_id)=2
ORDER BY f.file_name ASC
答案 1 :(得分:0)
你可以尝试以下几行:
SELECT f.pkID, f.file_name, f.file_description, f.file_path
FROM files f
RIGHT JOIN category_xref cox1 ON cox.fk_file_id = f.pkID AND cox1.fk_category_id = 59
RIGHT JOIN category_xref cox2 ON cox.fk_file_id = f.pkID AND cox2.fk_category_id = 69
ORDER BY f.file_name ASC