MYSQL ПРИСОЕДИНЯЙТЕСЬ к 3 таблицам, где поле в третьих таблицах должно быть 0 и ничего больше - PullRequest
0 голосов
/ 03 мая 2020

У меня есть 3 таблицы:

история

идентификатор, название

отношение категории

storyId , categoryId

категория

id, title, спокойствие (логическое значение 1 и 0)

Я хочу показать все истории, которые имеют категорию с значение 0 для спокойного

Я могу это сделать, но я не хочу, чтобы запрос показывал истории с категориями со спокойным = 0 и спокойным = 1

Или лучше: только показывать НЕ спокойный истории, то есть не показывать историю, если какая-либо ее категория имеет значение 1 в спокойном поле

То, что у меня сейчас есть:

SELECT s.id, s.title, c.title, c.calm FROM story s LEFT JOIN categoryrelation 
cr ON (cr.storyId = s.id) LEFT JOIN category c ON (cr.categoryId = c.id AND 
(c.calm = 0 AND c.calm != 1)) WHERE s.parentStory IS NULL AND s.active = 1 
ORDER BY s.id DESC LIMIT 0, 100

Это работает, но также выводит истории с категория со спокойной = 1

Выборка данных:

история

1, тестовая

2, другая история

категория отношения

1, 1

1, 2

1, 3

2, 4

категория

1, тайна, 0

2, триллер, 0

3, романтика, 1

4, ужас, 0

Ожидаемый результат:

2, другая история

Любая помощь приветствуется.

Спасибо!

1 Ответ

1 голос
/ 03 мая 2020

Вы можете группировать по истории и устанавливать условие в предложении HAVING:

SELECT s.id, s.title
FROM story s 
LEFT JOIN categoryrelation cr ON (cr.storyId = s.id) 
LEFT JOIN category c ON cr.categoryId = c.id 
WHERE s.parentStory IS NULL AND s.active = 1 
GROUP BY s.id, s.title
HAVING MAX(c.calm) = 0
ORDER BY s.id DESC LIMIT 0, 100

Условие MAX(c.calm) = 0 означает, что категории с c.calm = 1 не существует. Смотрите демо . Результаты:

| id  | title        |
| --- | ------------ |
| 2   | anotherstory |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...