Помогите составить sql запрос. Есть таблицы:
tbl_article(id, title)
tbl_category(id, title)
tbl_tag(id, title, geotag)
И таблицы связей:
tbl_category_articles(id, category_id, article_id)
tbl_article_tag(id, article_id, tag_id)
Нужно выбрать все записи из tbl_category_articles
, где category_id = 177
, и если у article
нет тега у которого поле geotag = 1
.
В общем-то не знаю как проверку по geotag
реализовать.
Мой неправильный вариант запроса:
SELECT * FROM `tbl_category_articles` ca
INNER JOIN tbl_article_tagnew at
ON ca.article_id = at.article_id
INNER JOIN tbl_tagnew t
ON at.tag_id = t.id
WHERE ca.category_id = 177
AND t.geotag = 0
Возможно, что Вам поможет решить Вашу проблему следующая конструкция:
SELECT * from tbl_category_articles WHERE category_id = 177
AND article_id NOT IN (
SELECT tbl_article_tag.article_id
FROM tbl_article_tag INNER JOIN tbl_tag
ON tbl_article_tag.tag_id = tbl_tag.id
WHERE tbl_tag.geotag= 1
)
Сразу должен предупредить, что у меня сейчас нет никаких технических возможностей проверить запрос, поэтому там возможны синтаксические ошибки, но надеюсь, что идея понятна.
P.S. Джентльмены находят, что графическая схема связей таблиц в тексте вопроса ускоряет время получение ответа и уменьшает количество возможных ошибок, особенно если ответ приходится писать "на колене" в обычном текстовом редакторе :).
Примерно так:
SELECT * FROM `tbl_category_articles` ca
INNER JOIN tbl_article_tagnew at
ON ca.article_id = at.article_id
LEFT JOIN tbl_tagnew t
ON at.tag_id = t.id AND t.geotag = 1
WHERE ca.category_id = 177 and t.geotag is null
Cмысл такой:
LEFT JOIN
таблицы, в которой не должно быть этого значения:
LEFT JOIN tbl_tag t ON ... t.geotag = 1
Так мы получим выборку где tbl_tag
приджойнится именно с geotag = 1
или не приджойнится вообще. И нам нужно только отфильтровать те строки, где не приджойнилось:
WHERE ... and t.geotag is null
Виртуальный выделенный сервер (VDS) становится отличным выбором
Разрабатываю в MS Visual Studio 2017 Community, тестирую на телефоне Xiaomi через приложение LivePlayerКогда происходит ошибка, на телефоне в нижней части экрана...
ПодскажитеХочу вынести модели данных в отдельный проект