У меня есть база данных SQLite с 3 таблицами, interests
, events
, categories
. Вы можете добавить категорию в свои интересы, и мне нужно написать запрос, который вытягивает все события, прикрепленные к этой категории.SQLite LEFT JOIN игнорируется предложением WHERE
Вы также можете добавить мероприятие в свои интересы или отключить мероприятие, чтобы оно не отображалось под категорией.
например. заинтересованы во всех эпизодах «Теории большого взрыва», но отключите один эпизод, который вы уже видели.
Этот запрос выбирает все события для категории в таблице интересов, в том числе события инвалидов:
SELECT events.id AS event_id, events.title, event_interests.disabled
FROM interests
JOIN events ON events.category_id = interests.id
AND interests.type LIKE "category"
LEFT JOIN interests AS event_interests ON event_interests.id = events.id
AND event_interests.type LIKE "event"
Что дает следующие результаты:
Event_ID Title Disabled
122749 Bad Education
122815 Bad Education 1
122852 Bad Education
Этот запрос делает то же самое, но пределы to инвалидов
SELECT events.id AS event_id, events.title, event_interests.disabled
FROM interests
JOIN events ON events.category_id = interests.id
AND interests.type LIKE "category"
LEFT JOIN interests AS event_interests ON event_interests.id = events.id
AND event_interests.type LIKE "event"
WHERE event_interests.disabled = 1
Только возвращенный номер возвращается
Event_ID Title Disabled
122815 Bad Education 1
Но я хочу, чтобы все события , которые не отключены. Но перевернув WHERE event_interests.disabled
не дает мне, что:
SELECT events.id AS event_id, events.title, event_interests.disabled
FROM interests
JOIN events ON events.category_id = interests.id
AND interests.type LIKE "category"
LEFT JOIN interests AS event_interests ON event_interests.id = events.id
AND event_interests.type LIKE "event"
WHERE event_interests.disabled != 1
Это дает пустой набор результатов, вместо возвращения событий 122749, 122852
Я сделал что-то глупое с моим JOIN и?
Это может быть NULL, 1 или 0. Я хочу получить 0 или NULL –
Тогда вы должны сказать, что явно: 'disabled = 0 ИЛИ disabled IS NULL'. – Denis
Да, я могу! 'WHERE event_interests.disabled IS NULL ИЛИ event_interests.disabled = 0' отлично работает. Спасибо, Денис. Почему это, хотя, видя, что '1! = NULL' –