第一个:SELECT
 A.*,
 B.*,
 (SELECT count(*) FROM TABLE_A A1 WHERE A1.版本号 = 版本号 AND A1.合同编号 = 合同编号) DUP_CHK
FROM
 TABLE_A A,
 TABLE_B B
WHERE
 A.版本号 = B.版本号
AND A.版本号 = '9999'
AND A.自编号 = B.自编号第二个:SELECT
 A.*,
 B.*,
 C.DUP_CHK
FROM
 (SELECT * FROM TABLE_A WHERE 版本号 = '9999') A,
 (SELECT * FROM TABLE_B WHERE 版本号 = '9999') B,
 (SELECT DISTICT 自编号, count(*) over (partition by 合同编号) DUP_CHK FROM TABLE_A WHERE 版本号 = '9999') C
WHERE
    A.自编号 = B.自编号
AND A.自编号 = C.自编号第一个执行速度非常慢,所以把它改成了第二个的样子。第二个运行得飞快,但是改完后有点糊涂,不知道是否完全和原来的等价。TABLE_A和TABLE_B都有版本号和自编号(共通的),
TABLE_A有合同编号等一些合同基本信息,
TABLE_B是合同的明细,对同一合同可能有多条明细.
DUP_CHK是检查该条记录是否存在同一版本号且同一合同编号(重复)请帮忙看一下。thanks.

解决方案 »

  1.   

    你的这两个SQL语句中最有可能导致不同的地方就是自编号这个字段的变化,现在不清楚你的自编号在数据库表中起什么作用,所以不怎么好说你的这两个SQL语句到底相同还是不同
      

  2.   

    應該是一樣的,在你的二個SQL中A,B是沒有變化的,DUP_CHK 是對同一版本號和同一合同編號的數量統計,對於第二個,我覺得DISTINCT是否可以不要因為count本來就是集合函數。至少第一個SQL很慢,我建議你把
    FROM 
      TABLE_A   A, 
      TABLE_B   B  
    WHERE 
      A.版本号   =   B.版本号 
    AND   A.版本号   =   '9999' 
    AND   A.自编号   =   B.自编号 
    修改成 
    FROM 
      TABLE_B   B, 
      TABLE_A   A 
    WHERE A.版本号   =   '9999' 
    AND   A.版本号   =   B.版本号 
    AND   A.自编号   =   B.自编号