首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化查询以检查是否count = subselect内所有匹配项的计数

优化查询以检查是否count = subselect内所有匹配项的计数
EN

Stack Overflow用户
提问于 2020-04-15 14:21:13
回答 1查看 38关注 0票数 0

我有一个正常工作的查询,如下所示:

代码语言:javascript
复制
SELECT c.id, c.uid, c.name, c.end_date FROM core.customers c
 INNER JOIN cms.fruit_policies ovp ON ovp.fruit_units = c.id
 WHERE(
   SELECT
          count(*) as c,
   FROM core.fruits f
   INNER JOIN cms.fruit_policies ov ON ov.fruit_units = f.id
   WHERE ov.template_uid IS NOT NULL
   AND ov.template_uid = 'TdBljmQIbB'
   AND f.customer_id = c.id
   group by c.id
 ) = (select count (*) from core.fruits f where f.customer_id = c.id) -- This line is where I need help
 AND ovp.template_uid <> 'TdBljmQIbB'
 AND c.end_date > '2019-04-15'
 order by c.end_date desc

查询的效率有点低,因为我花了额外的时间扫描客户表来计算all The core.fruits _id‘s= c.id,我不确定如何在subselect中做到这一点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-15 14:46:29

我写这段代码是盲目的,因为你没有提供太多。如果这不是你要问的。请具体一点。

代码语言:javascript
复制
WITH CUSTOMERZ AS (SELECT * FROM CORE.CUSTOMERS)
  SELECT C.ID,
     C.UID,
     C.NAME,
     C.END_DATE
FROM CUSTOMERZ C
     INNER JOIN CMS.FRUIT_POLICIES OVP
        ON OVP.FRUIT_UNITS = C.ID AND OVP.TEMPLATE_UID <> 'TdBljmQIbB'
     INNER JOIN
     (  SELECT COUNT (*) AS C, C.ID
          FROM CORE.FRUITS F
               INNER JOIN CMS.FRUIT_POLICIES OV ON OV.FRUIT_UNITS = F.ID
               INNER JOIN CUSTOMERZ C ON F.CUSTOMER_ID = C.ID
         WHERE OV.TEMPLATE_UID IS NOT NULL AND OV.TEMPLATE_UID = 'TdBljmQIbB'
      GROUP BY C.ID) QUERY1
        ON QUERY1.ID = C.ID
     INNER JOIN
     (  SELECT COUNT (*) AS C, C.ID
          FROM CORE.FRUITS F INNER JOIN CUSTOMERZ C ON F.CUSTOMER_ID = C.ID
      GROUP BY C.ID) QUERY2
        ON QUERY2.ID = C.ID
   WHERE 1 = 1 AND C.END_DATE > '2019-04-15' AND QUERY1.C = QUERY2.C
ORDER BY C.END_DATE DESC
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61222508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档