繁体   English   中英

我的SQL查询有什么问题

[英]what's wrong with my sql query

我希望它返回product_extrafield_id不为14的记录,但它仍会在我的结果中返回它。

SELECT op. * 
FROM 
  products_to_products_extra_fields AS p
  INNER JOIN orders_products AS op ON p.products_id = op.products_id
  INNER JOIN orders AS o ON op.orders_id = o.orders_id
WHERE NOT 
EXISTS (

    SELECT * 
    FROM products_to_products_extra_fields
    WHERE
      p.products_id = op.products_id
      AND p.products_extra_fields_id = 14
  )
  AND o.date_purchased BETWEEN  '2013-11-29' AND  '2013-12-03 23:59:59'
  AND o.payment_method =  'Institutional Billing'
  AND o.orders_status <100001
GROUP BY o.orders_id
ORDER BY DECODE( o.cc_type,  'oFsAfHr7' ) ASC 
LIMIT 0 , 30

如果我正确地阅读了您的SQL,那么您就不需要NOT NOTISTS子句了。 只需用以下语句替换NOT EXISTS子句:p.products_extra_fields_id!= 14

SELECT 
    op. * 
FROM 
    products_to_products_extra_fields AS p
    INNER JOIN orders_products AS op 
    ON p.products_id = op.products_id
    INNER JOIN orders AS o 
    ON op.orders_id = o.orders_id
    WHERE 
        p.products_extra_fields_id != 14
    AND o.date_purchased BETWEEN  '2013-11-29' AND  '2013-12-03 23:59:59'
    AND o.payment_method =  'Institutional Billing'
    AND o.orders_status <100001
GROUP BY o.orders_id
ORDER BY DECODE( o.cc_type,  'oFsAfHr7' ) ASC 
LIMIT 0 , 30

为什么在不使用聚合函数的情况下进行分组? 另外,为什么要尝试对不在您的SELECT中的字段进行GROUP BY? 我添加了DISTINCT运算符,并移动了逻辑。 您的子查询使用的是来自主/外部查询的条件。

SELECT DISTINCT o.cc_type, op.* 
FROM  orders_products AS op 
  INNER JOIN orders AS o 
    ON op.orders_id = o.orders_id
WHERE o.date_purchased BETWEEN  '2013-11-29' AND  '2013-12-03 23:59:59'
  AND o.payment_method =  'Institutional Billing'
  AND o.orders_status <100001
  AND NOT EXISTS (SELECT *
                  FROM products_to_products_extra_fields AS p
                  WHERE p.products_id = op.products_id
                    AND p.products_extra_fields_id = 14)
ORDER BY DECODE( o.cc_type,  'oFsAfHr7' ) ASC 
LIMIT 0 , 30;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM