我正在创建一个清单样式的程序,其中文件被分配给清单,并且您检查某些文件的清单中的项目。我正在尝试运行一个查询,该查询返回特定清单项目的所有READY文件(订购项目)。
因此,例如,我正在尝试查看哪些文件已准备好用于清单项目编号3,因此我需要找到所有已标记为已检查项目编号2的文件,但不是项目编号3。
我也不想使用子查询,即使我知道子查询可以解决这个问题(这就是为什么需要这么长时间),因为这个查询将针对每个核对表项运行,我觉得这里的子查询会对性能产生负面影响。
到目前为止,这是我的查询:
SELECT
DISTINCT f.filename, f.id
FROM
files f LEFT JOIN checklist_item_checklist cic1 LEFT JOIN checklist_check cc1 ON
cc1.checklist_item_checklist_id = cic1.checklist_item_checklist_id ON
cc1.file_id != f.id,checklist_item_checklist cic2,
checklist_check cc2
WHERE
cic1.checklist_item_checklist_id = 2 AND
cic2.order_number = cic1.order_number - 1 AND
cic1.checklist_id = cic2.checklist_id AND
cc2.checklist_item_checklist_id = cic2.checklist_item_checklist_id AND
cc2.file_id = f.id
表结构是:
文件
checklist_item_checklist
checklist_check
谢谢!
答案 0 :(得分:1)
您的查询中有很多语法错误。我相信你需要一个子查询。
这应该有效:
SELECT f.id, f.filename
FROM files f
JOIN checklist_check cc ON cc.file_id = f.id
JOIN checklist_item_checklist cic ON cic.checklist_item_checklist_id = cc.checklist_item_checklist_id AND cc.order_number = 2
WHERE f.id not in(
SELECT f.id,
FROM files f
JOIN checklist_check cc ON cc.file_id = f.id
JOIN checklist_item_checklist cic ON cic.checklist_item_checklist_id = cc.checklist_item_checklist_id AND cc.order_number = 3)