[英]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.