我有一个查询,我根据该表中选定的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'
显然(我认为)这是某种加入,但它在这个星期六早上逃过了我。
答案 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