2015-10-27 2 views
0

У меня есть две таблицы: terems и logs1015.
Нужно добавить данные из logs1015 до теремов на основе аналогичной строки «хэша».MySQL left join empty result

Этот запрос работает отлично, если 'SUM (INSUM)' или 'SUM (outsum) больше 0.
Но если logs1015 не содержит данных с такой' хэш 'затем результат запроса пуст.

Какая ошибка? Благодарности

SELECT terems.*, 
    SUM(insum) as firstsum , 
    SUM(outsum) as secondsum 
    FROM terems 
    LEFT JOIN logs1015 USING(hash) 
    WHERE owner='1' 
     AND (type='stat') 
     AND (time BETWEEN 1445904000 AND 1445990400) 
    GROUP BY name 
    LIMIT 1000 

Таблицы Структура

*terems*: id(int),hash(varchar),name(varchar),owner(int) 
*logs1015*: id(int),hash(varchar),type(varchar),insum(int),outsum(int),time(varchar) 
+3

Какова структура ваших таблиц? – Alex

+0

'' '' '' '' '' '' '' '' найденный '' logs1015'? Если это так, то вам также нужно проверить нулевые значения в соответствии с несуществующими строками. – vhu

+0

Измените свой вопрос и включите * квалифицированные имена столбцов * (так что имя таблицы идентифицировано). –

ответ

1

Когда (слева) внешнее присоединение, вы должны положить ИНЕК на внешних таблицах в условии объединения, в противном случае вы говорите, что он должен существовать после присоединения. И затем вы косвенно превратили его в внутреннее соединение.

Также используйте псевдонимы на своих таблицах, чтобы вы могли легко обнаружить эти ошибки.

Пример:

SELECT t.name, 
    SUM(l.insum) as firstsum , 
    SUM(l.outsum) as secondsum 
FROM terems t 
LEFT JOIN logs1015 l ON t.hash = l.hash 
        AND (l.type='stat') 
WHERE t.owner='1' 
    AND (t.time BETWEEN 1445904000 AND 1445990400) 
GROUP BY t.name 
LIMIT 1000 
+0

Просто добавьте структуры таблицы в эту тему. Ваш запрос дает тот же результат, что и мой. – 966p

0

Рабочий раствор:

"SELECT t.*, 
     SUM(l.insum) as firstsum , 
     SUM(l.outsum) as secondsum 
     FROM terems t 
     LEFT JOIN logs1015 l ON 
      t.hash = l.hash 
      AND (l.type='stat') 
      AND (l.time BETWEEN $fromstamp AND $tostamp) 
     WHERE t.owner='$userid'  
     GROUP BY t.name 
     LIMIT 1000"; 

Спасибо большое!