MySQL查询左连接的两个表-得到错误的结果

06011991

我用左联接联接两个表,以得到总和结果,但是给出错误的结果。这是我的

table1
    | id | event | currency | amount |
    |----|-------|----------|--------|
    | 1  | HSA   | USD      | 2000   |
    | 2  | DMME  | USD      | 3000   |
    | 3  | HSI   | INR      | 1500   |
    | 4  | HSI   | INR      | 1500   | 

表2

| id | table1_id | rcvamount | adjamount |
|----|-----------|-----------|-----------|
| 1  | 1         | 1980      | 20        |
| 2  | 2         | 1000      | 180       |
| 3  | 2         | 1500      | 20        |
| 4  | 4         | 1487      | 13        |

这是我的查询

SELECT
T1.event,T1.currency,
SUM(T1.total) AS Totalvalue,

SUM(T1.received) AS Received, 
(T1.bal) AS balance
FROM (SELECT
      table1.id,
      table1.amount AS total,

      SUM(table2.rcvamount+table2.adjamount) AS received,
      ((table1.amount)- sum(table2.rcvamount+table2.adjamount)) AS bal,
      table1.event,  
      table1.currency
      FROM table1 LEFT JOIN table2 ON table1.id=table2.table1_id 
     group by table1.id)T1
      Group By T1.event,T1.currency

但是,当我运行此查询时,给出如下错误结果。当涉及到名为HSI的第三个事件时,表2中的ID号3没有任何行。结果应按事件和货币分组。

| event | currency | Totalvalue | Received | balance |
|-------|----------|------------|----------|---------|
| DMME  | USD      | 3000       | 2700     | 300     |
| HSA   | USD      | 2000       | 2000     | 0       |
| HSI   | INR      | 3000       | 1500     | NULL    |

但是实际结果应该如下

| event | currency | Totalvalue | Received | balance |
|-------|----------|------------|----------|---------|
| DMME  | USD      | 3000       | 2700     | 300     |
| HSA   | USD      | 2000       | 2000     | 0       |
| HSI   | INR      | 3000       | 1500     | 1500    |

我没有弄错查询的地方。请帮助我进行排序。谢谢。

阿曼尼(Amani Ben Azzouz)

您正在使用,LEFT JOIN因此您将拥有所有第一张表行,即使它们在第二张表中没有通过所需的联接匹配。

在您的情况下,在第一个表中,id = 3在第二个表中不匹配,因此您将获得NULL结果。SELECT * FROM table2 WHERE table1_id =3将给出0个结果)。

为了避免这种使用INNER JOIN

SELECT T1.event, T1.currency, SUM( T1.total ) AS Totalvalue, 
       SUM( T1.received ) AS Received, ( T1.bal) AS balance
    FROM (
     SELECT table1.id, table1.amount AS total, 
     SUM( table2.rcvamount + table2.adjamount ) AS received, 
     ((table1.amount) - sum( table2.rcvamount + table2.adjamount ))AS bal,
     table1.event, table1.currency
     FROM table1
     INNER JOIN table2 ON table1.id = table2.table1_id
    GROUP BY table1.id
   )T1

 GROUP BY T1.event, T1.currency

更新 :

试试这个,COALESCE()将每个转换null0

SELECT T1.event, T1.currency, SUM( T1.total ) AS Totalvalue, SUM( T1.received ) AS Received, (
T1.bal
) AS balance
FROM (

SELECT table1.id, table1.amount AS total, SUM( COALESCE( table2.rcvamount, 0 ) + COALESCE( table2.adjamount, 0 ) ) AS received, (
COALESCE( table1.amount, 0 ) - sum( COALESCE( table2.rcvamount, 0 ) + COALESCE( table2.adjamount, 0 ) )
) AS bal, table1.event, table1.currency
FROM table1
LEFT JOIN table2 ON table1.id = table2.table1_id
GROUP BY table1.id
)T1
GROUP BY T1.event, T1.currency

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MySQL查询左连接的两个表-得到错误的结果

来自分类Dev

MySQL结果计数从多个表得到错误的结果?

来自分类Dev

Linq方法左连接两个列表以得到扁平化的列表结果

来自分类Dev

MYSQL:查询两个表并将结果从第二个表连接到一个数组

来自分类Dev

MYSQL:查询两个表并将结果从第二个表连接到一个数组

来自分类Dev

PostgreSQL-使用特定查询得到错误的结果

来自分类Dev

查询一个左表和两个右表的UNION结果而无需并集运算符

来自分类Dev

MySQL查询联接两个表并得到合并两行为一

来自分类Dev

如何连接两个单独的MySQL查询以给出一个结果?

来自分类Dev

添加两个mysql查询的结果

来自分类Dev

添加两个mysql查询的结果

来自分类Dev

两个mysql查询结果的差异

来自分类Dev

具有相同表和连接逻辑但结果不同的两个查询

来自分类Dev

mysql左连接两个表

来自分类Dev

MySQL一个结果来自同一表中的两个查询

来自分类Dev

通过追加新列来连接两个不同的MySQL结果查询

来自分类Dev

如何在MySQL中使用子查询显示两个表的混合结果?

来自分类Dev

MySQL UPDATE两个表的结果与预期不符(以什么顺序执行查询?)

来自分类Dev

如何在MySQL中使用子查询显示两个表的混合结果?

来自分类Dev

如果两个表都有行,MySQL查询仅返回结果

来自分类Dev

从两个不同的mysql表中获取特定的查询结果

来自分类Dev

连接两个表,然后从结果中随机获取n%的行。(查询http://data.stackexchange.com/中的表)

来自分类Dev

连接两个选择查询和排序结果

来自分类Dev

连接模板帮助器中两个查询的结果

来自分类Dev

将节点 js 中的表与 pg 连接时,我得到错误的结果

来自分类Dev

我想将这两个选择查询的结果连接为一个表中的四列

来自分类Dev

MySql从两个表中多次选择并将它们的结果连接到第三个表

来自分类Dev

得到重复的结果mysql查询

来自分类Dev

合并两个表,并按比例交错两个表的选择查询结果

Related 相关文章

  1. 1

    MySQL查询左连接的两个表-得到错误的结果

  2. 2

    MySQL结果计数从多个表得到错误的结果?

  3. 3

    Linq方法左连接两个列表以得到扁平化的列表结果

  4. 4

    MYSQL:查询两个表并将结果从第二个表连接到一个数组

  5. 5

    MYSQL:查询两个表并将结果从第二个表连接到一个数组

  6. 6

    PostgreSQL-使用特定查询得到错误的结果

  7. 7

    查询一个左表和两个右表的UNION结果而无需并集运算符

  8. 8

    MySQL查询联接两个表并得到合并两行为一

  9. 9

    如何连接两个单独的MySQL查询以给出一个结果?

  10. 10

    添加两个mysql查询的结果

  11. 11

    添加两个mysql查询的结果

  12. 12

    两个mysql查询结果的差异

  13. 13

    具有相同表和连接逻辑但结果不同的两个查询

  14. 14

    mysql左连接两个表

  15. 15

    MySQL一个结果来自同一表中的两个查询

  16. 16

    通过追加新列来连接两个不同的MySQL结果查询

  17. 17

    如何在MySQL中使用子查询显示两个表的混合结果?

  18. 18

    MySQL UPDATE两个表的结果与预期不符(以什么顺序执行查询?)

  19. 19

    如何在MySQL中使用子查询显示两个表的混合结果?

  20. 20

    如果两个表都有行,MySQL查询仅返回结果

  21. 21

    从两个不同的mysql表中获取特定的查询结果

  22. 22

    连接两个表,然后从结果中随机获取n%的行。(查询http://data.stackexchange.com/中的表)

  23. 23

    连接两个选择查询和排序结果

  24. 24

    连接模板帮助器中两个查询的结果

  25. 25

    将节点 js 中的表与 pg 连接时,我得到错误的结果

  26. 26

    我想将这两个选择查询的结果连接为一个表中的四列

  27. 27

    MySql从两个表中多次选择并将它们的结果连接到第三个表

  28. 28

    得到重复的结果mysql查询

  29. 29

    合并两个表,并按比例交错两个表的选择查询结果

热门标签

归档