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

danneo

Честный
Регистрация
13 Ноя 2007
Сообщения
1.526
Реакции
121
Делается запрос из MySQL (выборка объекта).
Одно из полей необязательное к заполнению "форма собственности". Поэтому там может быть 0.
Далее в SQL-запросе идет объединение из разных таблиц через INNER JOIN
Дак вот, если у этого объекта форма собственности равна 0, то такой объект не выводится, т.к. соединять через INNER JOIN нечего - нет формы собственности в таблице со значением id = 0
Подскажите, пожалуйста, как быть?
 
Объединяй через LEFT JOIN или RIGHT JOIN, в зависимости от порядка таблиц в запросе.
Например, если ты join`ишь таблицу, в которой может не быть значения, по которому объединяешь таблицы, используй LEFT JOIN.

Графическое представление для лучшего понимания: Для просмотра ссылки Войди или Зарегистрируйся Только в 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)).

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