Mysql найти клиентов, которые купили X, но не Y - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь определить, купил ли клиент продукт, но не конкретный продукт.

В моей базе данных есть 2 таблицы, на которые нам нужно будет сослаться - tblOrders и tblOrderItems

tblOrders
OrderID, FirstName, LastName, Email

tblOrderItems
OrderItemID, OrderID, ProductID

tblOrders может иметь или много конкретных заказов для клиента.Это будет основано на электронной почте для нескольких заказов одного человека.Каждый заказ может иметь один или несколько элементов заказа.Это продукты, связанные с заказом.К ним присоединяется OrderID.ProductID будет присоединен к tblProducts, но для этого вопроса мы можем просто сослаться на ProductID в tblOrderItems.

По сути, скажем, я ищу людей, которые никогда не покупали «шляпу».Мы продаем брюки, рубашки и головные уборы.

Джонни Б. купил пару брюк в январе, он купил рубашку в феврале, поэтому мне понадобится его запись, чтобы никогда не покупать шляпу.

Джени С. купила штаны в январе, в феврале - шапку, а в марте - рубашку.Она не должна подходить к результату.

Билл У. купил пару штанов и рубашку в одном заказе (несколько предметов), поэтому мне нужна его запись, чтобы она никогда не покупала шляпу.

Я могу заставить работать один заказ с несколькими предметами, но в прошлом у меня были проблемы с несколькими заказами.Я в основном хочу получить уникальные (групповые) электронные письма, которые никогда не покупали шляпы.

1 Ответ

0 голосов
/ 02 декабря 2018

«Я в основном хочу получить уникальное (групповое) письмо, которое никогда не покупало шляпы».

Просто переведите это в запрос

select o.emailid
  from tblOrders o
  join tblOrderItems oi
    on o.orderid=oi.orderid
group by o.emailid
having count(case when oi.productid=<product_id_of_hat> then 1 end)=0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...