我有 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 的一部分,它似乎只是挂起试图获取结果。 (大约有2,000个用户和40,000笔交易)
谢谢!
最佳答案
您需要将事务表的条件移至 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
关于mysql - 即使表 2 中没有行,如何连接表并显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6819521/