Есть две таблицы:
1. Obj:
id | title | id_category
1 | a1 | 1
2 | a2 | 2
3 | a3 | 2
4 | a4 | 3
5 | a5 | 3
6 | a6 | 3
7 | a7 | 4
8 | a8 | 4
9 | a9 | 4
10 | a10 | 4
2. Category:
id | type | id_user
1 | 1 | 2
2 | 1 | 3
3 | 2 | 2
4 | 2 | 3
Нужно выбрать все объекты определенной категории что-бы Category.type<>2, а если тип категории ровно 2, то Category.id_user=пользователь который делает выборку, к примеру 2
В итоге должно получится:
id_user=1 и id_category=2 [выборка] a2, a3;
id_user=2 и id_category=3 [выборка] a4, a5, a6;
id_user=2 и id_category=4 [выборка] нет записей;
id_user=3 и id_category=4 [выборка] a7, a8, a9, a10;
id_user=3 и id_category=1 [выборка] a1;
Вот пример неверного запроса:
SELECT DISTINCT Obj.*
FROM objects Obj
JOIN category Cat
ON Cat.type<>2 OR Cat.id_user=2
WHERE Obj.id_category=4