SQL-запрос исключить записи - PullRequest
0 голосов
/ 28 мая 2018

Я хочу запросить базу данных гостей, которые купили определенные предметы.Я хочу посмотреть, что покупатели покупали товар «А», а не товар «Б».

Я пытался:

SELECT customerName 
FROM Customers 
WHERE NOT item = 'A' AND item = 'B';

Но я возвращаю клиентов, которые купили оба товара.Я хотел бы исключить этих клиентов из этого запроса.

Я использую SQLite

Ответы [ 3 ]

0 голосов
/ 28 мая 2018

Вы также можете использовать оператор MINUS, который возвращает все строки в первом операторе SELECT, которые не возвращаются вторым оператором SELECT.Такие как:

(SELECT customerName FROM Customers WHERE item='A')
MINUS
(SELECT customerName FROM Customers WHERE item='B'); 
0 голосов
/ 29 мая 2018

Я бы использовал EXISTS с NOT EXISTS:

select c.*
from Customers c
where exists (select 1 
              from Customers c1 
              where c1.customerName = c.customerName and c1.item = 'A'
             ) and not exists 
             (select 1 
              from Customers c2 
              where c2.customerName = c.customerName and c2.item = 'B'
             );
0 голосов
/ 28 мая 2018

Есть несколько способов сделать это.Мне нравится использовать group by и having, потому что он очень гибкий для многих условий:

SELECT customerName
FROM Customers
GROUP BY customerName
HAVING SUM(CASE WHEN item = 'A' THEN 1 ELSE 0 END) > 0 AND
       SUM(CASE WHEN item = 'B' THEN 1 ELSE 0 END) = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...