与join运算符关联的sql db2 on子句或merge语句中的sql db2 on子句无效

cbjzeqam  于 2021-07-29  发布在  Java
关注(0)|答案(3)|浏览(503)

所以我试着运行一个查询,发现它产生了一个我不清楚的错误:

  1. select a.employer_id, a.customer_id, s.service, count(a.account_num) as "TOTAL_COUNT"
  2. from dhs01.msa_account a
  3. left outer join dhs01.alt_services s
  4. on a.customer_id = s.customer_id
  5. and s.service = 'TH'
  6. and a.employer_id not in (select s2.employer_id from dhs01.alt_services s2 where s2.service = 'TE') -<<<<----- THIS IS THE BAD LINE
  7. where
  8. a.ACCT_MAINT_FEE = 'E'
  9. AND a.STAT = 'O'
  10. AND a.OPEN_CONFIRM_DATE < (CURRENT_DATE - (DAY(CURRENT_DATE)-1) DAYS) ---first of the current
  11. group by a.employer_id, a.customer_id, s.service;

查询非常接近工作状态,但是由于某种原因,subselect查询抛出了一个错误(如果我删除了这个错误,我得到的结果基本上是正确的,除了不排除那些我想排除的结果)。我通常看到on子句中的subselect在db2中起作用,而且实际上有一些示例与之类似。

jyztefdp

jyztefdp1#

尝试:

  1. from dhs01.msa_account a
  2. left join table
  3. (
  4. select s.*
  5. from dhs01.alt_services s
  6. where s.customer_id = a.customer_id and s.service = 'TH'
  7. and not exists
  8. (
  9. select 1
  10. from dhs01.alt_services s2
  11. where s2.service = 'TE' and s2.employer_id = a.employer_id
  12. )
  13. ) s on 1=1

而不是:

  1. from dhs01.msa_account a
  2. left outer join dhs01.alt_services s
  3. on a.customer_id = s.customer_id
  4. and s.service = 'TH'
  5. and a.employer_id not in (select s2.employer_id from dhs01.alt_services s2 where s2.service = 'TE') -<<<<----- THIS IS THE BAD LINE
展开查看全部
7lrncoxx

7lrncoxx2#

您的查询似乎完全正确,但仍然可以使用下面的查询-

  1. SELECT a.employer_id,
  2. a.customer_id,
  3. s.service,
  4. COUNT(a.account_num) AS "TOTAL_COUNT"
  5. FROM dhs01.msa_account a
  6. LEFT OUTER JOIN dhs01.alt_services s
  7. ON a.customer_id = s.customer_id
  8. AND s.service = 'TH'
  9. WHERE a.acct_maint_fee = 'E'
  10. AND a.stat = 'O'
  11. AND a.open_confirm_date < (CURRENT_DATE - (DAY(CURRENT_DATE)-1) DAYS) --first of the current
  12. AND NOT EXISTS (SELECT NULL
  13. FROM dhs01.alt_services s2
  14. WHERE s2.service = 'TE'
  15. AND a.employer_id = s2.employer_id)
  16. GROUP BY a.employer_id,
  17. a.customer_id,
  18. s.service;
展开查看全部
fzsnzjdm

fzsnzjdm3#

如果要在on子句中进行筛选,可以尝试以下查询:

  1. select a.employer_id, a.customer_id, s.service, count(a.account_num) as "TOTAL_COUNT"
  2. from dhs01.msa_account a
  3. left outer join dhs01.alt_services s
  4. on a.customer_id = s.customer_id
  5. and s.service = 'TH'
  6. and a.employer_id <> (select distinct s2.employer_id from dhs01.alt_services s2 where s2.service = 'TE' and a.employer_id=s2.employer_id)
  7. where
  8. a.ACCT_MAINT_FEE = 'E'
  9. AND a.STAT = 'O'
  10. AND a.OPEN_CONFIRM_DATE < (CURRENT_DATE - (DAY(CURRENT_DATE)-1) DAYS) ---first of the current
  11. group by a.employer_id, a.customer_id, s.service;

如果您想排除所有服务为'te'的雇主标识,从而减少执行时间,那么您应该尝试下面的方法query:-

  1. select a.employer_id, a.customer_id, s.service, count(a.account_num) as "TOTAL_COUNT"
  2. from dhs01.msa_account a
  3. left outer join dhs01.alt_services s
  4. on a.customer_id = s.customer_id
  5. and s.service = 'TH'
  6. where
  7. a.ACCT_MAINT_FEE = 'E'
  8. AND a.STAT = 'O'
  9. AND a.OPEN_CONFIRM_DATE < (CURRENT_DATE - (DAY(CURRENT_DATE)-1) DAYS) ---first of the current
  10. AND not exists(select 1 from dhs01.alt_services s2 where s2.service = 'TE' and a.employer_id=s2.employer_id)
  11. group by a.employer_id, a.customer_id, s.service;
展开查看全部

相关问题