我有两张桌子。表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。
有没有办法可以避免这种情况。其他一些编写此查询的方法。
谢谢。
答案 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