2014-12-27 3 views
1

В моем приложении для Android у меня есть база данных с двумя рядами интересов.Левое внешнее соединение sql не работает

table1   table2  
|_id | name | |_id | table1_id |amount 

Я хочу, чтобы запрос, который возвращает каждую строку в таблице один дополненной с суммой количества строк для каждой строки в table2 с table1_id, что соответствует _id в таблице 1. Это то, что Я придумал до сих пор:

SELECT table1._id, table1.name, SUM(amount) 
FROM table1 LEFT OUTER JOIN table2 
USING(table1._id,table2.table1._id) ; 

Это один возвращает строку с 0 в столбце SUM (сумма), а также если таблица 1 полностью разряжен (результат | - | - | 0 |). Я хочу, чтобы результат был полностью пуст, когда table1 пуст. Когда нет соответствий для определенного ряда в table1, я бы хотел, чтобы они просто добавлены 0.

Любые мысли по улучшению запроса?

ответ

1

Вы могли group by до прихода:

SELECT   t1._id, t1.name, t2.sum_amount 
FROM   table1 t1 
LEFT OUTER JOIN (SELECT table1_id, SUM(amount) AS sum_amount 
       FROM  table2 
       GROUP BY table1_id) t2 
      ON t1._id = t2.table1_id; 
+0

это работает! спасибо – user1111652

+0

Зачем раньше и не после? –

0
SELECT 
    table1._id, table1.name, SUM(IFNull(amount,0)) 
FROM 
    table1 LEFT OUTER JOIN table2 
ON 
    table1._id = table2.table1._id 
Смежные вопросы