mapper.xml中的mysql查询问题

现有两个表分别为 A 和 B

clipboard.png

clipboard.png

此时手头上有参数nums = ["a1","a3"]

根据已有的参数,要向表B中查得B.num字段值为"a1"、"a3"的记录分别的条数,及表A中A.num字段值为"a1"、"a3"的字段所对应的A.a_name字段的值

想要得到的数据形式:

clipboard.png


尝试过程
SQL语句:(执行一次只能获得一行数据,若多次执行的话,当参数过长时会频繁发起数据库操作,请求响应时间太长)

SELECT SUM(b.num = "a1") AS `count`,a.a_name,a.num FROM a,b WHERE b.num = a.num AND b.num ="a1";

mapper.xml中:

<select id="xxx" parameterType="java.lang.String" resultType="xxx">
    SELECT SUM(b.num = "a1") AS `count`,a.name...
</select>
SELECT子句中如何引用参数并且此处还有循环,已跪...

是我思路不对还是此需求没有实现方案?求解惑...


更新:
另一思路:

SELECT num,a_name FROM a where num IN ("a1","a3");

num   a_name
a1    麻辣串
a3    香肠
SELECT COUNT(num = "a1") AS "a1",COUNT(num = "a3") AS "a3" FROM b;

a1   a3
3    2

将两次查询所得的结果进行处理,即得出需要的数据格式
然有没有能一句SQL即可解决的方案?

阅读 3.3k
3 个回答
select b.num,a.a_name,count(1) count from a join b on a.num=b.num where b.num in ('a1','a3') group by b.num

思路没问题,sql有问题

SELECT b.num,(SELECT a.a_name from A a WHERE b.num = a.num) a_name,count(0) from B b WHERE b.num in ( "a1","a3") GROUP BY b.num

foreach的循环只需要处理WHERE b.num in ( "a1","a3")部分就可以了

你好,直接在查询结果中使用子查询即可解决问题。而且这种sql效率很高,group by 之后能大幅减少查询结果的条数,在这基础上使用子查询就会快很多很多。

select

t_b.num mum, 
count(*) count,
(select a_name from a where num = t_b.num) name

from b t_b
group by t_b.num

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题