如何选择订购3种不同产品的客户,而不是第四种?

时间:2017-01-23 10:21:31

标签: mysql prestashop

我有这个SQL查询,让我知道客户订购某个产品的时间:

qDebug() << QByteArray::fromHex("ACDC"); // outputs "\xAC\xDC"

我希望得到订购产品1,2,3但从不订购4的客户。

我不能简单地制作SELECT * FROM ps_customer c INNER JOIN ps_orders o ON (c.id_customer=o.id_customer) INNER JOIN ps_order_detail od ON(od.id_order=o.id_order) WHERE od.product_id=1 ,但我仍然坚持如何正确构建该查询。

有关信息,数据库结构是基本的Prestashop(1.6.1.4)数据存储区。

这里是SQLFiddle: http://sqlfiddle.com/#!9/dfd65

(我无法添加数据,对SQLFiddle来说太过分了......)

感谢您的帮助:)

2 个答案:

答案 0 :(得分:1)

你可以在id_customer

上使用几个dinaminc表连接
  select * from (  
        SELECT id_customer 
        FROM ps_customer c
        INNER JOIN ps_orders o ON c.id_customer=o.id_customer
        INNER JOIN ps_order_detail od ON od.id_order=o.id_order 
        WHERE od.product_id  <> 4  ) t1
  INNER JOIN (
    SELECT id_customer FROM ps_customer c
    INNER JOIN ps_orders o ON c.id_customer=o.id_customer
    INNER JOIN ps_order_detail od ON od.id_order=o.id_order 
    WHERE od.product_id in ( 1,2,3)
    having count(distinct(od.product_id)) =3
    ) t2 on t1.id_customer = t2.id_customer

答案 1 :(得分:1)

可能你应该以不同的方式思考

SELECT * FROM ps_customer c
INNER JOIN ps_orders o ON (c.id_customer=o.id_customer)
INNER JOIN ps_order_detail od ON(od.id_order=o.id_order)
WHERE od.product_id IN (1, 2, 3)  and c.id_customer NOT IN (select id_customer from ps_orders where product_id IN (4) )