Ошибка при выборке из БД (INNER JOIN)

Тема в разделе "Базы данных", создана пользователем danneo, 15 фев 2014.

Модераторы: latteo
  1. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.463
    Симпатии:
    114
    Делается запрос из MySQL (выборка объекта).
    Одно из полей необязательное к заполнению "форма собственности". Поэтому там может быть 0.
    Далее в SQL-запросе идет объединение из разных таблиц через INNER JOIN
    Дак вот, если у этого объекта форма собственности равна 0, то такой объект не выводится, т.к. соединять через INNER JOIN нечего - нет формы собственности в таблице со значением id = 0
    Подскажите, пожалуйста, как быть?
     
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.546
    Симпатии:
    1.418
    Объединяй через LEFT JOIN или RIGHT JOIN, в зависимости от порядка таблиц в запросе.
    Например, если ты join`ишь таблицу, в которой может не быть значения, по которому объединяешь таблицы, используй LEFT JOIN.

    Графическое представление для лучшего понимания: http://www.profstat.ru/article/sql-joins.html Только в mysql не используй слово OUTER и нет FULL OUTER JOIN, хотя и такая выборка реализуема.
    Пиши просто LEFT JOIN:
    Код:
    SELECT * FROM TableA
    LEFT  JOIN TableB
    ON TableA.name = TableB.name
    
    Выберет все из TableA даже для строк, где условие TableA.name = TableB.name не соблюдается, для всех TableB.* будет просто добавлен null

    Возможно тебе в sql запрос нужно добавить условие (id = 0 OR isnull(id)).

    Это общие рекомендации, для более точного совета надо видеть твой запрос, структуру таблиц, может даже пример возвращаемых данных :)
     
    Последнее редактирование: 15 фев 2014
    segalp и danneo нравится это.
  3. newminer

    newminer Создатель

    Регистр.:
    21 апр 2015
    Сообщения:
    13
    Симпатии:
    4
    Использование Left Join очень удобно, так как можно объединять с самой же таблицой, и в итоговом выводе получить, например, количества общие, и количества, соответствующие более узкому условию. По-другому это сделать в одном запросе не получится.