Я создаю программу в стиле контрольного списка, в которой файлы назначаются контрольным спискам, а вы проверяете элементы контрольных списков для определенных файлов. Я пытаюсь выполнить запрос, который возвращает все файлы, ГОТОВЫ для определенного элемента контрольного списка (элементы упорядочены).
Так, например, я пытаюсь увидеть, какие файлы готовы для элемента контрольного списка № 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_item_checklist_id (PK)
- ORDER_NUMBER
checklist_check
- file_id (FK to files.id)
- checklist_item_checklist_id (от FK до checklist_item_checklist.checklist_item_checklist_id)
Спасибо!