繁体   English   中英

从内部联接仅获得一行

[英]Get only one row from inner join

我有两张桌子。 表A中的主键是表B中具有另一列的主键。

所以结构就是这样。

Table A
id - PRIMARY
total_amount

Table B
id - PRIMARY
another_id PRIMARY
status 

所以我可以让表A中的ID在表B中多次出现。我的问题是此查询

SELECT IFNULL(SUM(total_amount), 0) AS amount
FROM tableA AS a
INNER JOIN tableB AS b
ON a.id = b.id
WHERE a.id = 10
AND status <> 'UNKNOWN'

有时会返回更多应有的金额。 如果ID 10上的total_amount是2,并且同一id 10在表b中重复了三遍,我的金额将是6而不是2。

有没有办法可以避免这种情况。 编写此查询的其他方法。

谢谢。

使用exists代替:

SELECT IFNULL(SUM(total_amount), 0) AS amount
FROM tableA a
WHERE EXISTS (SELECT 1
              FROM tableB AS b
              WHERE a.id = b.id AND b.status <> 'UNKNOWN'
             );

DISTINCT从tableB返回的ID列表

SELECT 
    IFNULL(SUM(total_amount), 0) AS amount
FROM 
    tableA AS a INNER JOIN (SELECT DISTINCT id FROM tableB WHERE [status] <> 'UNKNOWN') AS b ON a.id = b.id
WHERE 
    a.id = 10

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM