微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对子查询使用NOT EXISTS

如何解决对子查询使用NOT EXISTS

我正在尝试创建一个查询,以检索所有购买了一个SKU('Red399')但又没有购买第二个SKU('Red323')的所有客户。看来最好的方法是将NOT EXISTS与子查询一起使用,以过滤掉购买“ Red323”的人。

我的查询没有返回任何错误,但是也没有返回任何结果,我认为这可能是因为我在初始WHERE子句中有太多条件,但是我不确定:

SELECT disTINCT o."FirstName",o."LastName",o."Email",ol."SKU"
FROM flight_export_order o
JOIN flight_export_orderline ol
    ON o."OrderdisplayID" = ol."OrderdisplayID"
WHERE ol."SKU" = 'Red399'
AND o."OrderDate" BETWEEN '07/22/2020' AND '08/03/2020'
AND NOT EXISTS 
(SELECT disTINCT o."Email" 
    FROM flight_export_order o
    JOIN flight_export_orderline ol
        ON o."OrderdisplayID" = ol."OrderdisplayID"
    WHERE ol."SKU" = 'Red323'
    AND o."OrderDate" BETWEEN '07/22/2020' AND '08/03/2020')

解决方法

您不需要子查询。
您可以按客户分组并在<template> <v-navigation-drawer mini-variant dark app permanent :src="imageSrc" /> </template> <script> export default { data() { return { imageSrc: null }; },mounted() { this.imageSrc = require('./src/assets/image.jpg') },}; </script> 子句中设置条件:

having
,

开始时您处在正确的轨道上。 EXISTS / NOT EXISTS是正确的工具:

SELECT o.* --  or just the columns you need
FROM   flight_export_order o
WHERE  o."OrderDate" BETWEEN '2020-07-22' AND '2020-08-03'
AND    EXISTS (
   SELECT FROM flight_export_orderline
   WHERE  "OrderDisplayID" = o."OrderDisplayID"
   AND    "SKU" = 'Red399'
   )
AND    NOT EXISTS (
   SELECT FROM flight_export_orderline
   WHERE  "OrderDisplayID" = o."OrderDisplayID"
   AND    "SKU" = 'Red323'
   );

flight_export_orderline ("OrderDisplayID","SKU")上使用多列索引,这是最快的。仅("OrderDisplayID")上的索引(就像您可能有的索引)也很长。

显然,在flight_export_order("OrderDate")上加了索引。

我认为不需要任何昂贵的聚合或DISTINCT。参见:

此外1:如果可以的话,请尽量避免在Postgres中使用带引号的CaMeL-case标识符。参见:

除了2:reommended to use ISO 8601 date formatYYYY-MM-DD)始终是明确的,并且与语言环境和会话设置无关。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。