INNER JOIN показывает только первую строку в таблице - PullRequest
0 голосов
/ 25 декабря 2018

В моей базе данных есть следующие данные:

scu_banks:

---------------------------------
|   id    |   type   |   name   |
|-------------------------------|  
|    1    |    1     |   One    |
|    2    |    1     |   Two    |
|    3    |    2     |  Three   |
|    4    |    3     |   Four   |
---------------------------------

scu_statement:

---------------------------------
|   id    |   code   |   mutation   |
|-----------------------------------|  
|    1    |    1     |     100      |
|    2    |    1     |     200      |
|    3    |    2     |     500      |
|    4    |    1     |     500      |
-------------------------------------

Что я хочу сделать, я хочу выбратьвсе строки в таблице scu_banks и показывают общую сумму мутаций.Данные должны быть представлены следующим образом:

--------------------------------------------------------------
| scu_banks.type | scu_banks.name |   total   | scu_banks.id |
--------------------------------------------------------------
|       1        |      One       | € 800.00  |      1       |
|       1        |      Two       | € 500.00  |      2       |
|       2        |     Three      | €   0.00  |      3       |
|       3        |      Four      | €   0.00  |      4       |
--------------------------------------------------------------

Когда я запускаю свой оператор sql, я получаю следующие данные:

---------------------------------------------------------------
| scu_banks.type | scu_banks.name |    total   | scu_banks.id |
--------------------------------------------------------------
|       1        |      One       | € 1300.00  |      1       |
---------------------------------------------------------------

Данные, которые я получаю в этом случае, неверны.€ 1300,00 это сумма всех мутаций в таблице scu_statement.Этот оператор также не показывает другие строки в базе данных.

Кто-то знает, что не так с моим оператором sql?

Вот мой оператор sql:

SELECT      scu_banks.type,
            scu_banks.name, 
            CONCAT('€ ', FORMAT(IFNULL(SUM(scu_statement.mutations), 0),2)) AS total, 
            scu_banks.id
FROM        scu_banks
INNER JOIN  scu_statement
ON          scu_banks.id = scu_statement.code

1 Ответ

0 голосов
/ 25 декабря 2018

Сделайте агрегацию в подзапросе и оставьте присоединиться к ней в банках.

SELECT b.type "scu_banks.type",
       b.name "scu_banks.name",
       concat('€ ', format(coalesce(x.mutation, 0), 2)) "total",
       b.id "scu_banks.id"
       FROM scu_banks b
            LEFT JOIN (SELECT s.code,
                              sum(s.mutation) mutation
                              FROM scu_statement s
                              GROUP BY s.code) x
                      ON x.code = b.id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...