Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 两个视图上的联接查询_Java_Sql - Fatal编程技术网

Java 两个视图上的联接查询

Java 两个视图上的联接查询,java,sql,Java,Sql,我有两种观点:主视图和详细视图。主视图有状态列,而局部视图有一些历史记录。我需要找出未结/未决案件的已结案件的历史记录 现在我使用Java代码分两步完成这项工作 首先获取打开/挂起的列表。 然后对结果进行循环,以获得闭合案例的计数。 问题是它运行得非常慢,因为第2步的查询每次需要6秒,如果第1步中有20个查询用于分页,则第一个查询需要2分钟以上的运行时间 我的SQL是 您需要加入您对事件的看法,如下所示: select vtm.*, ( select count(*) f

我有两种观点:主视图和详细视图。主视图有状态列,而局部视图有一些历史记录。我需要找出未结/未决案件的已结案件的历史记录

现在我使用Java代码分两步完成这项工作

首先获取打开/挂起的列表。 然后对结果进行循环,以获得闭合案例的计数。 问题是它运行得非常慢,因为第2步的查询每次需要6秒,如果第1步中有20个查询用于分页,则第一个查询需要2分钟以上的运行时间

我的SQL是


您需要加入您对事件的看法,如下所示:

select vtm.*, 
  (
    select count(*) 
    from VW_Detail vtc 
    inner join VW_Master vtm2 on vtc.event_id = vtm2.event_id
    where vtc.user_id = vtm.user_id and vtc.provider_id = vtm.provider_id and vtm2.status = 'CLOSE'
  )
from VW_Master vtm
where vtm.status = 'OPEN' or vtm.status = 'PEND';
这一个正在做这项工作,我认为尽管有子请求,它仍然比笛卡尔积的请求更有效


我希望这会有所帮助。

以下是加入的查询:

select user_id, provider_id, count(*)
from VW_Master vtm, VW_Detail vtc
where 
     vtm.user_id in 
        (select user_id from VW_Master vtm where status = 'OPEN' or status= 'PEND')
  and vtm.provider_id in 
       (select provider_id from VW_Master vtm where status = 'OPEN' or status= 'PEND')
  and vtm.status = 'CLOSE' 
  and vtm.event_id = vtc.event_id
group by user_id, provider_id;

我以为您希望这样。

运行时间没有显著提高。有没有一种方法可以将两个查询组合起来,而不用我去做for循环?您是如何进行分页的?使用分页代码编辑您使用的是什么数据库?这个rownum是否已修复?Oracle 11g。没有参数化rownum。随着页面大小的更改而更改。如果您使用的是Oracle11g,为什么不在问题中添加标记?你用MySQL创建了一个不支持窗口功能的小提琴?我不知道如何在分页中关联查询结果。对你的查询进行解释和分析,你就会知道为什么你的查询很慢。顺便问一下,为什么不使用主键和外键。有些索引可以让你的查询运行得更快。这个只给我计数。我需要列出主控中的打开/挂起,并对每行进行计数。无法链接到我的分页查询语句
select user_id, provider_id, count(*)
from VW_Master vtm, VW_Detail vtc
where 
     vtm.user_id in 
        (select user_id from VW_Master vtm where status = 'OPEN' or status= 'PEND')
  and vtm.provider_id in 
       (select provider_id from VW_Master vtm where status = 'OPEN' or status= 'PEND')
  and vtm.status = 'CLOSE' 
  and vtm.event_id = vtc.event_id
group by user_id, provider_id;