У меня вопрос по поводу запроса Sqlite3.
Задача состоит только из одного предложения: выбрать все столбцы клиентов, которые купили более 4 раз (> = 5 раз)
в период с 2018-01-01 по 2018- 12-31 и не купил номер продукта 4402
Объяснение всех таблиц базы данных для этого вопроса:
1) Клиент
столбцы: CustomerNum , CustomerName, DateOfBirth, Пол, CustomerAddress, CustomerPhoneNum.
2) Колонки покупки
: ПокупкаNum , PurchaseTime, CustomerNum , ShippingCompanyNum
3) Закупка содержит
столбцы: ПокупкаNum , SupplierNum, ProductNum , Сумма
Я выделил столбцы, которые, по моему мнению, необходимы для решения этого вопроса.
Мой запрос:
SELECT Customer.* FROM Customer INNER JOIN Purchase
on Customer.CustomerNum = Purchase.CustomerNum
INNER JOIN PurchaseContains
on Purchase.PurchaseNum = PurchaseContains.PurchaseNum
WHERE Purchase.PurchaseTime BETWEEN '2018-01-01' AND '2018-12-31' AND PurchaseContains.ProductNum != 4402
GROUP BY Purchase.CustomerNum
HAVING COUNT(Purchase.PurchaseNum) > 4;
Однако из-за ВНУТРЕННЕГО СОЕДИНЕНИЯ я думаю, что некоторые строки дублируются!
Например, это без внутреннего объединения 'PurchaseContains ':
SELECT Customer.* FROM Customer INNER JOIN Purchase
on Customer.CustomerNum = Purchase.CustomerNum
--COMMENT:
--INNER JOIN PurchaseContains
--on Purchase.PurchaseNum = PurchaseContains.PurchaseNum
WHERE Purchase.PurchaseTime BETWEEN '2018-01-01' AND '2018-12-31' -- COMMENT: AND PurchaseContains.ProductNum != 4402
GROUP BY Purchase.CustomerNum
HAVING COUNT(Purchase.PurchaseNum) > 4;
И это возвращает только 2 строки. Но теперь он не проверяет, не было ли у человека покупки, которая содержит номер товара 4402 (должен выводиться только 1 человек).
Первый SQL Запрос в этом вопросе возвращает 2078 строк!
Я потерян!
Заранее спасибо!