[mysql] запрос из 2х таблиц. если нет данных во 2 таблице, поставить ноль

dandandan

Мой дом здесь!
Регистрация
7 Авг 2008
Сообщения
1.036
Реакции
292
Есть 2 таблицы (на самом деле кол-во колонок гораздо больше).

table1
id tovar
1 парашют
2 кукла
3 телефон
4 вертолет

table 2
id_tovar cena
1 1000
2 2000
3 3000

table1.id и table2.id_tovar - связанные столбцы.

Нужно получить все товары из table1 и цены к ним из таблицы 2. Если в таблице 2 отсутствует цена для такого id товара, то в строке подставить "ноль"

Сейчас запрос делаю так:

PHP:
SELECT a.tovar, a.id, b.cena
FROM table1 a,
        table2 b
WHERE a.id=b.id_tovar
В результате теряется из таблицы 1 строка с идентификатором id = 4, а надо, чтобы она тоже выводилась и при этом в таблице цена было значение = 0 (т.к. в таблице2 отсутствует строка с ценой.).

p.s. Просьба НЕ ПРЕДЛАГАТЬ объединить таблицы в одну. На самом деле в таблицах сложная взаимосвязь.
 
:facepalm:

Код:
SELECT a.tovar, a.id, b.cena
    FROM `table1` AS a
        LEFT JOIN `table2` AS b ON (a.id = b.id_tovar)
Так не вариант?
 
Подходит, только возвращает не число 0, а NULL

Остался вопрос какие из параметров писать в ON ( тут ) и какие после WHERE тут ?
Поправьте, если неправильно напишу. В ON писать параметры, которые объединяют таблицы, а в WHERE только те, в которых задаются условия выборки без объединения таблиц.
 
Код:
SELECT a.tovar, a.id, IF (b.cena IS NULL, 0, b.cena) AS cena
    FROM `table1` AS a
    LEFT JOIN `table2` AS b ON (a.id = b.id_tovar)
Как-то так. Хотя, для php null - не критично. Сам при конвертировании скинул бы в ноль.
 
SELECT a.tovar, a.id, case WHEN b.cena IS NULL then 0 ELSE b.cena END
FROM `table1` AS a
LEFT JOIN `table2` AS b ON (a.id = b.id_tovar)
 
Назад
Сверху