Как объединить таблицы и показать, даже если в таблице 2 нет строк - PullRequest
2 голосов
/ 25 июля 2011

У меня есть 2 таблицы, одна с пользователями и другая с транзакциями. Я пытаюсь отобразить всех пользователей с суммой их транзакций.

Выражение ниже показывается правильно, за исключением того, что оно будет включать только пользователей, у которых есть транзакции. Как я могу перечислить всех пользователей, и если нет транзакции, она должна отображать сумму как 0?

Вот заявление, которое я использую:

SELECT 
    user.ID, user.FirstName, user.LastName, 
    user.Username, 
    SUM(transaction.Amount) As Total
FROM    user 
    LEFT JOIN transaction 
        ON user.ID = transaction.runnerID
WHERE user.event = 'EventX' 
    AND user.Active = 'True' 
    AND (user.tran_result = '1' OR user.tran_result ='manual' )  
    AND transaction.event = 'EventX' 
    AND (transaction.tran_result = '1' OR transaction.tran_result ='manual' )
GROUP BY user.ID
ORDER BY user.LastName ASC 

Я предполагаю, что это оператор WHERE, который удаляет эти строки, но если я удаляю оператор WHERE и помещаю эти детали как часть LEFT JOIN, он, кажется, просто зависает, пытаясь получить результаты. (Есть около 2000 пользователей и 40 000 транзакций)

Спасибо!

Ответы [ 3 ]

3 голосов
/ 25 июля 2011

Необходимо переместить критерии для таблицы транзакций в условие JOIN.Включение его в предложение WHERE фактически превращает ваше внешнее соединение во внутреннее соединение:

SELECT ....
FROM user
LEFT JOIN transaction 
    ON user.ID = transaction.runnerID 
       AND transaction.event = 'EventX' 
       AND (transaction.tran_result = '1' OR transaction.tran_result ='manual' )
WHERE user.event = 'EventX' 
  AND user.Active = 'True' 
  AND (user.tran_result = '1' OR  user.tran_result ='manual' )
GROUP BY user.ID
ORDER BY user.LastName ASC 
0 голосов
/ 25 июля 2011

Вы пытались изменить SUM(transaction.Amount) на SUM(ISNULL(transaction.Amount, 0))? Это гарантирует, что значение NULL (т. Е. Нет соответствующих транзакций) будет рассматриваться как 0.

0 голосов
/ 25 июля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...