Sergei_Erjemin
@Sergei_Erjemin
Улыбайся, будь самураем...

Как сделать SQL UNION если в табличках не полные данные?

Ни разу не программист, но лет пятнадцать назад похожий запрос однажды построил... Помню, что как-то применил UNION и фиктивные поля типа O AS FIELD... А еще помню, что потратил на него недели три времени (а может и больше). А сейчас мозги совсем заржавели и не соображу даже с чего начать. А надо примерно следующее:

Есть ТАБЛИЦА "ТАРА":
id1 |  НАЗВАНИЕ_ТАРЫ
----+-------------------------
01  |  Ящик
02  |  Корзинка
03  |  Грузовик

Есть ТАБЛИЦА "ГРУЗ":
id2 |  НАЗВАНИЕ_ГРУЗА
----+------------------------
01  |  Огурцы
02  |  Молоко
03  |  Туалетная бумага

Есть "ТАБЛИЦА СВЯЗЕЙ":
link1 |  link2    | КОЛИЧЕСТВО
------+-----------+--------------------
01    |  01       |  15 
01    |  02       |  2
02    |  01       |  4
02    |  03       |  2
03    |  01       |  100
03    |  02       |  60
03    |  03       |  500

И хочется получить:
НАЗВАНИЕ_ТАРЫ  |  НАЗВАНИЕ_ГРУЗА    |  КОЛИЧЕСТВО
---------------+--------------------+----------------
Ящик           |  Огурцы            |  15
Ящик           |  Молоко            |  2
Ящик           |  Туалетная бумага  |  0
Корзинка       |  Огурцы            |  4
Корзинка       |  Молоко            |  0
Корзинка       |  Туалетная бумага  |  2
Грузовик       |  Огурцы            |  100
Грузовик       |  Молоко            |  60
Грузовик       |  Туалетная бумага  |  500

То есть надо получить 0 для поля КОЛИЧЕСТВО в случаеях, когда объекты не связаны через ТАБЛИЦА СВЯЗЕЙ. Как?
  • Вопрос задан
  • 371 просмотр
Решения вопроса 1
@sunrails
table_box - тара
table_product - груз
table_link - связь
SELECT t1.name, t2.name, IFNULL(t3.qty, 0) as qty FROM table_box as t1 
INNER JOIN table_product as t2 
LEFT JOIN table_link as t3 ON (t3.link1 = t1.id1 AND t3.link2 = t2.id2);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы