Сложный sql запрос с условием

222
28 января 2018, 00:35

Помогите составить 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
Answer 1

Возможно, что Вам поможет решить Вашу проблему следующая конструкция:

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. Джентльмены находят, что графическая схема связей таблиц в тексте вопроса ускоряет время получение ответа и уменьшает количество возможных ошибок, особенно если ответ приходится писать "на колене" в обычном текстовом редакторе :).

Answer 2

Примерно так:

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
READ ALSO
Не работает LEFT JOIN yii2

Не работает LEFT JOIN yii2

В контроллере пишу следующие

286
Сложный mysql select

Сложный mysql select

Есть 6 таблиц:

291
Xamarin и ошибки

Xamarin и ошибки

Разрабатываю в MS Visual Studio 2017 Community, тестирую на телефоне Xiaomi через приложение LivePlayerКогда происходит ошибка, на телефоне в нижней части экрана...

229
Как добавить атрибут свойства в модель из другого проекта?

Как добавить атрибут свойства в модель из другого проекта?

ПодскажитеХочу вынести модели данных в отдельный проект

233