从内连接只获得一行

时间:2015-04-10 13:38:46

标签: mysql sql database

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

所以结构是这样的。

Table A
id - PRIMARY
total_amount

Table B
id - PRIMARY
another_id PRIMARY
status 

所以我可以在表B中多次出现表A中的id。 我的问题是这个查询

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,并且表b中的相同id 10重复三次,则我的金额将为6而不是2。

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

谢谢。

2 个答案:

答案 0 :(得分: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'
             );

答案 1 :(得分:1)

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