【问题标题】:Passing Arraylist to SQL query to get the desired result将 Arraylist 传递给 SQL 查询以获得所需的结果
【发布时间】:2020-05-13 04:39:28
【问题描述】:

我写了一个这样的查询:

select agent_id,count(id) as agentCount from demo.table lst where lst.agent_id in(:idpList) group by agent_id order by agentCount ASC;

但这仅返回 idp 列表中的 agent_id 我还想获取列表中但不在 demo.table 中的 id 并将计数返回为 0 。 我无法弄清楚我该怎么做。

例如:列表:[20,17,16,15,50] 所以 50 不是表格,但我希望 50 包含在最终结果中。

我有两个数据库,我正在获取所有 agent_id 并将其存储在列表中 在另一个数据库中,我有一个表,其中存储了与这些 id 关联的任务的 id 和 no,所以我想检查与这些 agent_id 对应的任务创建了多少次并获取计数,但是因为这些 agent_id 中的一些存在于第二个 DB 中表,但有些不是这样,因为那些不存在的计数应该返回 0,但是从这个查询中我得到的只是那些存在于第二个数据库表中的计数

我们将不胜感激。

【问题讨论】:

  • 你能分享一下这个查询的输出吗?
  • 现在这个查询的输出是 agent_id agentcount 20 2 17 3 16 1 15 1 但我也想要 50 个计数为 0
  • 您好,您的需求不清楚,能否请您尝试重述需求

标签: java sql database parameters hql


【解决方案1】:

试试这个:

select count(*),A.agent_id from 
(
select 20 as agent_id
union select 17
union select 16
union select 15
union select 50 ) as A  LEFT JOIN demo.table s on s.agent_id = A.agent_id where s.agent_id in(:idpList)  group by s.agent_id;  

但是你必须创建这个部分( 选择 20 作为 agent_id 工会选择 17 工会选择 16 工会选择 15 union select 50 ) 手动查询。

否则没有办法。

【讨论】:

  • 但是列表是动态的,而且大小也是
  • 是的,我知道,它是动态的,这就是为什么我在答案中写了手动处理这个问题,根据用户动态,只需以编程方式创建第一部分,然后根据我的查询加入。
猜你喜欢
  • 2020-12-28
  • 1970-01-01
  • 2016-08-02
  • 1970-01-01
  • 2020-11-19
  • 1970-01-01
  • 1970-01-01
  • 2011-10-25
  • 2021-04-05
相关资源
最近更新 更多