В чем может быть проблема с этим запросом в PostgreSQL? - PullRequest
0 голосов
/ 25 мая 2011

У меня есть такой запрос в 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" содержит около 50 записей lakh также 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

1 Ответ

1 голос
/ 25 мая 2011

Я переформатировал ваш запрос с помощью www.prettysql.net :

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

Похоже, что в вашем запросе есть предложение where, которое содержит $ 1, шаблон, используемый в Postgresql для передачи параметров.

Попробуйте заменить его на что-то вроде '2011-05-25' :: date и посмотрите, поможет ли это.

...