Добавить в JOIN значение по умолчанию

222
12 декабря 2017, 17:17

Всем доброе время суток, есть несколько таблиц

Content

id |title|Author_Id |
---|-----|----------|
 1 | asd | 2        |
---|-----|----------|

Author_Content

Author_Id |Content_id |
----------|-----------|
     2    |     1     |
----------|-----------|

Author

Id   |Name |
-----|-----|
2    |Павел|

Столбцы не имеющие отношения к вопросу были опущены, для экономии места.

Собственно вроде бы все понятно, Content - таблица с каким-то контентом; Author_Content - таблица соотношений id контена -> id автора; Author - id Автора -> его имя.

Я дергаю данные вот таким запросом:

SELECT
    t2.id as `txt_id`,
    UNIX_TIMESTAMP( t2.show_time ) as `date_end_time`,
    1 as index_id,
    `type_id`,
    `content_type_id`,
    `title`,
    `annonce`,
    `content`,
    t2.title as title,
    t1.Author_Id as Author_Id,
    t3.Name as AuthorName
FROM
    `Content` as t2
JOIN `Author_Content` as t1 ON
    t2.id = t1.Content_id
JOIN `Author` as t3 ON
    t1.Author_Id = t3.Id
WHERE
    t2.status = 1
    AND t2.content_type_id != 14;

Запрос отрабатывает хорошо, возвращает все что нужно, кроме ситуации, когда нет в какой то таблице данных, увы сайт который достался по наследству, подразумевает что в Author_Content может и не быть соотношение id контена -> id автора, тогда запрос возвращает пустой результат.

Если точнее то не выполняется вот это условие в запросе:

t2.id = t1.Content_id

Собственно сам вопрос: помогите составить запрос так что бы в случае отсутствия записи в Author_Content возвращалось какое то дефолтное значение, например -1; я так понимаю там должно быть что то вроде If но не знаю если честно как его подружить с JOIN

Answer 1

Спасибо пользователю Akina за ответы, но сделал немного по своему, все-таки решил через IFNULL

SELECT
    t2.id as `txt_id`,
    UNIX_TIMESTAMP( t2.show_time ) as `date_end_time`,
    1 as index_id,
    `type_id`,
    `content_type_id`,
    `title`,
    `annonce`,
    `content`,
    t2.title as title,
    IFNULL(t1.Author_Id,-1) as Author_Id,
    IFNULL(t3.Name,'N/A') as AuthorName
FROM
    `Content` as t2
LEFT JOIN `Author_Content` as t1 ON
    t2.id = t1.Content_id
LEFT JOIN `Author` as t3 ON
    t1.Author_Id = t3.Id
WHERE
    t2.status = 1
    AND t2.content_type_id != 14;
READ ALSO
Как удалить из огромной таблицы поля MySQL?

Как удалить из огромной таблицы поля MySQL?

Подскажите пожалуйста как удалить из таблицы на 1,5 миллиона строк, строки где встречается в поле "category" = 'Рубрики'В поиске phpMyAdmin выдаёт 15 строк,...

223
c# клиент для asterisk [дубликат]

c# клиент для asterisk [дубликат]

Данный вопрос уже был задан и имеет решение:

249
C# implicit DataRow to class

C# implicit DataRow to class

Здравствуйте помогите конвертировать DataRow to class Car(impicit

301