kvf77
Red Devil
SQL запрос настроить
Задача следующая. Есть (таблицы конечно кастрированы для примера):
1) таблица в фамилиями авторов author_id, author_name
2) таблица дат календаря по каждому автору calendar_id, author_id
3) таблица связи авторов со статьями article_id, author_id
Необходимо выбрать всех авторов с их датами (если дата есть) и те, у кого есть статьи, пометить. Я делал это таким запросом:
SELECT DISTINCT author_name, IF(authors.author_id=articles_to_author.author_id, 1, 0) AS flag FROM authors, calendar, articles_to_author WHERE authors.author_id=calendar.author_id
По идее, поле flag должно содержать 1 если статьи у автора есть и 0 если нет, но результат другой - те авторы, статьи которых есть получают по две записи с 1 и 0, а те авторы, стей которых нет только 1 запись с 0. Как избежать избыточности данных?
А то сейчас мне приходится выбирать всех авторов и даты к ним, а потом смотреть (вторым запросом) есть ли у них статьи. Объясните, почему IF так работает. Как в SQL запросе проверить, если вообще нужное мне значение в таблице (в моем случае вообще достаточно проверить есть ли оно хотя бы раз)?
Задача следующая. Есть (таблицы конечно кастрированы для примера):
1) таблица в фамилиями авторов author_id, author_name
2) таблица дат календаря по каждому автору calendar_id, author_id
3) таблица связи авторов со статьями article_id, author_id
Необходимо выбрать всех авторов с их датами (если дата есть) и те, у кого есть статьи, пометить. Я делал это таким запросом:
SELECT DISTINCT author_name, IF(authors.author_id=articles_to_author.author_id, 1, 0) AS flag FROM authors, calendar, articles_to_author WHERE authors.author_id=calendar.author_id
По идее, поле flag должно содержать 1 если статьи у автора есть и 0 если нет, но результат другой - те авторы, статьи которых есть получают по две записи с 1 и 0, а те авторы, стей которых нет только 1 запись с 0. Как избежать избыточности данных?
А то сейчас мне приходится выбирать всех авторов и даты к ним, а потом смотреть (вторым запросом) есть ли у них статьи. Объясните, почему IF так работает. Как в SQL запросе проверить, если вообще нужное мне значение в таблице (в моем случае вообще достаточно проверить есть ли оно хотя бы раз)?