SQL суммирование до 0, если строка не найдена, при использовании объединения

#php #mysql #sql

#php #mysql #sql

Вопрос:

У меня много проблем с этим запросом, но я действительно чувствую, что не должен. Я преобразовал свою проблему в более простую, чтобы ее было легче понять.

 flowers_table
 --------------- ----------- 
| flower_id     | name      |
 --------------- ----------- 
| 1             | Tulips    |
| 2             | Rose      |
| 3             | Sun Flower|
| 4             | Orchids   |
 --------------- ----------- 

transaction_table
 ------------ ------------------ 
| trans_id   |  flower_id | sold|
 ------------ ------------------ 
| 1          |    1       | 2   |
| 2          |    1       | 10  |
 ------------ ------------ ----- 
  

Результат:

  --------------- ----------- 
| flower_id     | sold      |
 --------------- ----------- 
| 1             | 12        |
| 2             | 0         |
| 3             | 0         |
| 4             | 0         |
 --------------- ----------- 
  

Это то, что я придумал.

 SELECT flower_id.flower_table, COALESCE(SUM(transaction_table.sold), 0) AS sold
FROM flowers_table, transaction_table
Where flowers_table.flower_id = transaction_table.flower_id 
GROUP by flower_id
  

Комментарии:

1. Мне кажется, что это правильно. Только flower_id 1 проданный товар. В чем вопрос?

2. Удивительно, но это не даст результата, вот почему я чесал голову. Насколько я помню, строки, отсутствующие в transaction_table, не отображаются из-за объединения.

Ответ №1:

 SELECT flower_id.flower_table, COALESCE(SUM(transaction_table.sold), 0) AS sold
FROM flowers_table LEFT JOIN transaction_table on flowers_table.flower_id = transaction_table.flower_id 
GROUP by flowers_table.flower_id
  

Комментарии:

1. Аааа, я изначально пробовал это, но потерпел неудачу. Что я сделал, так это перевернул, какие таблицы были по обе стороны от «left join». Большая любовь.