【发布时间】:2011-05-25 06:50:46
【问题描述】:
我在 Postgres 中有这样的查询:
select sum("ATD_AMOUNT") AS CREDIT_SUM, 0 AS DEBIT_SUM,"ATD_ACCOUNT_MST_ID","AAD_OPEN_AMOUNT","AAM_ACCOUNT_NAME", "AAM_ACCOUNT_CODE" ,"AAD_YEAR_ID"
from db_accounts."ACC_TRANSACTION_DET"
left outer join db_accounts."ACC_TRANSACTION_MST" ON "ATD_TRANSACTION_MST_ID"= "ATM_TRANSACTION_MST_ID"
left outer join db_accounts."ACC_ACCOUNT_MST" ON "ATD_ACCOUNT_MST_ID"="AAM_ACCOUNT_MST_ID"
left outer join db_accounts."ACC_ACCOUNT_DET" on "AAM_ACCOUNT_MST_ID" = "AAD_ACCOUNT_MST_ID" and "AAD_YEAR_ID"=(select "AAY_YEAR_ID" from db_accounts."ACC_ACCOUNT_YEAR" where "AAY_IS_CURRENT_YEAR"=true)
where "ATM_TRANSACTION_DATE"<= $1 and "ATM_TRANSACTION_DATE">=(select "AAY_START_DATE" from db_accounts."ACC_ACCOUNT_YEAR" where "AAY_IS_CURRENT_YEAR"=true)
and "ATM_ON_REVERSE_PARENT_TRANSACTION_ID" is null and "ATM_IS_CANCELLED"=false
and "AAM_DEL_FLAG" =false
AND "ATD_CREDIT_DEBIT_TRANSACTION" = 'CREDIT'
GROUP BY "ATD_ACCOUNT_MST_ID","AAD_OPEN_AMOUNT","AAM_ACCOUNT_NAME", "AAM_ACCOUNT_CODE","AAD_YEAR_ID
这里是 db_accounts。“ACC_TRANSACTION_DET”包含大约 500 万条记录,还有 db_accounts。“ACC_TRANSACTION_MST”有 60000 条记录
现在我的问题是,当我在系统中使用相同的数据库运行此查询时,我得到了结果,但是当我在其他系统中尝试时它不起作用?
我还注意到,如果以下任何一个条件被删除,它就会显示结果
"ATM_TRANSACTION_DATE"<= $1 //field in db_accounts."ACC_TRANSACTION_MST" table
"ATM_TRANSACTION_DATE">=(select "AAY_START_DATE" from db_accounts."ACC_ACCOUNT_YEAR" where "AAY_IS_CURRENT_YEAR"=true) //field in db_accounts."ACC_TRANSACTION_MST" table
"ATD_CREDIT_DEBIT_TRANSACTION" = 'CREDIT' //field in db_accounts."ACC_TRANSACTION_DET" table
【问题讨论】:
-
当您说“相同的数据库”时,您的意思是两台计算机都查询相同的数据库服务器,还是您将数据库内容复制到您计算机上运行的 PostgreSQL 实例?
-
没有它的两个不同的服务器,我从另一个系统备份并在我的系统中恢复它。它在我的系统中运行良好。这可能是因为表中有很多数据吗?跨度>
-
解释分析对查询有什么看法?有哪些索引可用?您确定需要左连接,而不能使用内连接吗?
-
所有表都没有索引。每个表只有主键和对 DET 表的外部引用
标签: sql postgresql aggregate-functions