mysql - 即使表 2 中没有行,如何连接表并显示

标签 mysql database join

我有 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/

相关文章:

mysql - SQL Join 给出 30 个相同的结果

python - 加入列表中的每四个字符串

php - 我尝试登录后应用程序崩溃

mysql - 使用 where 子句和连接聚合 sql

database - 我正在寻找适合ssd磁盘的数据库

database - MDB 文件的最大容量?

mysql - 删除复杂 MySQL 查询中的重复行 - 不确定我是否做错了,或者这是一个 MySQL 错误

java - 如何为 Hibernate 设置 HSQLDB?

java - Stackoverflow 和 Hibernate 使用 sql IN (id, id, id, id..id)

php - 基于网络数据的大型机器学习