使用Sum条件连接两个表

时间:2016-04-09 14:15:14

标签: mysql join group-by

我有一个查询,我根据该表中选定的ID在值字段上生成一个总和:

Map.Entry<String, Optional<City>>

但是,我需要动态地从第二个表中获取ID列表,这是我迄今为止自己管理的:

SELECT Z,Sum(Z_N) FROM `TableA` 
WHERE `N_ID` in ('7703','7674','7689','7690','7691','7700','7719') 
group by Z 
having Sum(Z_N) > 65

N2_ID ='7703'实际上是我通过代码推送的变量。然而,我正在尝试将第二个查询“内部”替换为第一个替换手册Select group_concat(N_ID) from Table2 where N2_ID ='7703'

显然(我认为)这是某种加入,但它在这个星期六早上逃过了我。

2 个答案:

答案 0 :(得分:1)

INNER JOIN可以过滤您的结果。

SELECT TableA.Z,Sum(TableA.Z_N) 
FROM `TableA`
INNER JOIN Table2 ON Table2.N_ID = TableA.N_ID
where Table2.N2_ID ='7703'
group by TableA.Z 
having Sum(TableA.Z_N) > 65

对于性能,您应该Table2(N2_ID)TableA(N_ID, Z)上至少有(至少)索引。索引Table2(N2_ID, N_ID)TableA(N_ID, Z, Z_N)可能更好,因为完整的查询只能在索引上运行。

注意:如果Table2.N_ID是唯一的(或主键),则此方法有效。如果没有,您可能会得到意想不到的结果。

答案 1 :(得分:0)

您可以使用子选择

SELECT Z,Sum(Z_N) FROM `TableA` 
WHERE `N_ID` in (Select N_ID from Table2 where N2_ID ='7703') 
group by Z 
having Sum(Z_N) > 65