Тестирование SQLite Query для совпадения нескольких строк - PullRequest
0 голосов
/ 07 сентября 2018

Я немного застрял, пытаясь запросить это: Найти всех клиентов, которые заказали такой же номер клиента, как 250

Схема для базы данных:

Customers(
customerNumber INTEGER, PRIMARY KEY
);

Orders(
orderNumber INTEGER, PRIMARY KEY
customerNumber INTEGER NOT NULL,
FOREIGN KEY (customerNumber) REFERENCES Customers
);

OrderDetails (
  orderNumber INTEGER NOT NULL,
  productCode TEXT NOT NULL,
  PRIMARY KEY (orderNumber, productCode),
  FOREIGN KEY (productCode) REFERENCES Products
);

Я вычислил запрос:

select DISTINCT customerNumber
  FROM Orders Natural 
  JOIN OrderDetails
 WHERE productCode NOT IN (
    select productCode
    FROM Orders NATURAL JOIN OrderDetails
    WHERE customerNumber = 219
)    
order by customerNumber;

было бы правильно, но ничего не возвращает, так что ясно, что я что-то неправильно понимаю.

1 Ответ

0 голосов
/ 07 сентября 2018

Поскольку вам нужны все клиенты, то они заказывают все продукты, которые заказывают 250 или более 250, но имеют одинаковый продукт, поэтому пробовали с условной агрегацией

   select customerNumber
      FROM Orders o
      JOIN OrderDetails od 
     on o.orderNumber =od.orderNumber 
     WHERE od.productCode IN (
        select productCode
        FROM Orders o
       JOIN OrderDetails od 
       on o.orderNumber =od.orderNumber
        WHERE customerNumber = 250
    )    
     group by customerNumber
    having count(distinct productCode )>= 
        (select count(distinct productCode )
        FROM Orders o
       JOIN OrderDetails od 
       on o.orderNumber =od.orderNumber
        WHERE customerNumber = 250)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...