Предположим есть табилца Rules
ID | Rule | ItemID | Access
1 | books | 0 | 1
2 | books | 1 | 0
3 | shelves | 0 | 1
Например это раздел книг доступ открыт 1, но книга 1 закрыта. Это типа правила. Там все конечно сложнее очень много данных но это то что мне надо что бы решить задачу.
Значит задача такая, создать запрос, так что бы проверить есть ли доступ на книгу. Но вернуть запрос должен не 1 или 0 а запись или отсутствие записей для exists.
Ну вот мы выбираем.
SELECT * FROM books WHERE exists(
SELECT 1 FROM rules WHERE rule = 'books' AND itemid = books.id AND access = 1
)
Так работает. Я могу вывести только те книги к которым есть доступ.
Но что если например я выбираю shelves?
У полки нету записи на конкретную полку поэтому естественно полок мы не увидим.
А как мне сделать что бы если нет ссылки на конкретную запись, использовать запись общую 3 | shelves | 0 | 1 ?