@Klapanasos
Интересуюсь Веб-разработкой

SQL как получить данные из первой таблицы с условием наличия данных во второй по определенному значению?

Друзья, уже всю голову сломал, подскажите, пожалуйста, как построить запрос со следующими условиями.
Есть две таблицы, допустим, article и photo.
У каждой статьи из таблицы article может быть, от 0 до 5 фотографий одного типа и от 0 до 5 фотографий другого типа. Допустим 'before' и 'after'. Колонка в таблице 'photo' имеет название 'made'.
Одна строка в таблице 'photo' это одна фотография с пометкой 'before' или 'after' в соответствующем поле.

Запрос на получение статей, для которых вообще нет фотографий вот такой:
SELECT title AS 'Заголовок статьи', article.id AS 'Id статьи' FROM article
LEFT JOIN `photo` ON photo.article_id = article.id
WHERE article_id IS NULL
GROUP BY article.id


Не могу разобраться, как составить запрос таким образом, чтобы вывести только те статьи, в которых не добавлены фото "До" или не добавлены фото "После".
Насколько я понимаю, нужно как то сделать выборку по условию отсутствия записей с определенным значением поля "made".
Помогите, пожалуйста
  • Вопрос задан
  • 1288 просмотров
Решения вопроса 1
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
Это довольно банально:
SELECT `title` AS 'Заголовок статьи', `article`.`id` AS 'Id статьи' 
FROM `article`
LEFT JOIN `photo` ON `photo`.`article_id` = `article`.`id` AND `photo`.`made` = 'before' -- or 'after'
WHERE `article_id` IS NULL
GROUP BY `article`.`id`


Другой вариант:
SELECT `title` AS 'Заголовок статьи', `article`.`id` AS 'Id статьи' 
FROM `article`
WHERE NOT EXISTS (
    SELECT `article_id` 
    FROM `photo` 
    WHERE `photo`.`article_id` = `article`.`id` AND `photo`.`made` = 'before' -- or 'after'
);


выполнить SQL запрос на SQLize.online
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы