MultiTable SQL查询。新表上的(MAX)字段挂起查询

时间:2013-09-30 16:28:19

标签: sql sql-server odbc progress-db

我正在使用BIDS通过ODBC连接连接到Progress DB: 此查询工作正常

SELECT     
PUB."master"."app-number", 
...
PUB."property"."prop-id",

FROM
PUB."master" master JOIN PUB."property" property ON
master."lt-acnt" = property."lt-acnt"
...
LEFT OUTER JOIN PUB."arm" arm ON
master."lt-acnt" = arm."lt-acnt"

WHERE
...

但是,我需要从另一个表中添加一些额外的字段。问题是我只需要上次更新这些新字段时的信息。

我试过了:

SELECT
yt."app-number"
...
yt."disc-adj-tot",
yt."rt-adj-nbr",
yt."base-disc-per"

FROM (
  SELECT  PUB."master"."app-number", 
  ...
  PUB."lt-rt-adj-hdr"."disc-adj-tot",
  PUB."lt-rt-adj-hdr"."rt-adj-nbr",
  PUB."lt-rt-adj-hdr"."base-disc-per"

  FROM PUB."master" master JOIN PUB."property" property ON
  master."lt-acnt" = property."lt-acnt"
  ...
  JOIN PUB."lt-rt-adj-hdr" lt_rt_adj_hdr ON
  lt_master."lt-acnt" = lt_rt_adj_hdr."lt-acnt") yt

INNER JOIN(
SELECT "app-number",
MAX("rt-adj-nbr") "rt-adj-nbr"
FROM (  PUB."lt-master" lt_master JOIN 
    PUB."lt-rt-adj-hdr" lt_rt_adj_hdr  ON
    lt_master."lt-acnt" = lt_rt_adj_hdr."lt-acnt")
GROUP BY "app-number") ss on yt."app-number" = ss."app-number" and 
yt."rt-adj-nbr" = ss."rt-adj-nbr"

WHERE ...

此查询只是挂起并且不会返回结果,除非使用非常简单的WHERE子句,例如“WHERE yt。”app-number“= 123456”。我完全卡住了。

1 个答案:

答案 0 :(得分:1)

Progress DB的所有者是否曾运行“更新统计信息”? Progress SQL查询优化器需要具有良好的统计信息才能有效执行。进度应用程序通常使用4GL引擎而不是SQL,因此在许多情况下,管理员不会更新SQL统计信息。这通常会导致SQL查询性能非常差。

从4GL方面,管理员可以使用此脚本生成一个可以完成工作的程序:

/* genUpdateSQL.p
 *
 * mpro dbName -p util/genUpdateSQL.p -param "tmp/updSQLstats.sql"
 *
 * sqlexp -user userName -password passWord -db dnName -S servicePort -infile tmp/updSQLstats.sql -outfile tmp/updSQLtats.log
 *
 */

output to value( ( if session:parameter <> "" then session:parameter else "updSQLstats.sql" )).

for each _file no-lock where _hidden = no:

  put unformatted
     "UPDATE TABLE STATISTICS AND INDEX STATISTICS AND ALL COLUMN STATISTICS FOR PUB."
     '"' _file._file-name '"' ";"
    skip
  .
  put unformatted "commit work;" skip.

end.

output close.

return.

或者,如果您有足够的权限(只需插入_file._file-name的表名),就可以这样做。