mapper.xml中的mysql查询问题

发布于 2022-09-11 22:31:19 字数 1335 浏览 29 评论 0

现有两个表分别为 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即可解决的方案?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

猛虎独行 2022-09-18 22:31:19
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
各自安好 2022-09-18 22:31:19

思路没问题,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")部分就可以了

微凉 2022-09-18 22:31:19

你好,直接在查询结果中使用子查询即可解决问题。而且这种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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文