Мне нужна помощь в решении SQL-запроса, мне нужно перечислить имена потребителей, запрашивающих хотя бы один продукт, но не запрашивающих молоко - PullRequest
0 голосов
/ 02 апреля 2019

Мне нужна помощь в решении вопроса «Перечислите имена клиентов, которые запрашивают хотя бы один продукт, но не запрашивают молоко. У меня есть грубое начало, но я не знаю, как это закончить. Вот что у меня есть до сих пор».

SELECT DISTINCT 
    Tb_Consumer.Con_ID, Tb_Consumer.Name
FROM 
    Tb_Consumer, Tb_Requests
WHERE 
    Tb_Consumer.Con_ID = Tb_Requests.Con_ID  
    AND Tb_Consumer.Con_ID NOT IN (SELECT Tb_Consumer.Con_ID)

Вывод, который я ищу, следующий:

Con_id    Name
----------------
  2       Hammer
  4       Hoffer

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Вместо использования EXISTS вы можете использовать HAVING. Это сэкономит на 2 сканированиях / поисках таблицы tb_Requests.

SELECT C.Con_ID, C.[Name]
FROM Tb_Consumer C
     JOIN Tb_Requests R ON C.Con_ID = R.Con_ID
GROUP BY C.Con_ID, C.[Name]
HAVING COUNT(R.Req_ID) > 0
   AND COUNT(CASE R.Product_name WHEN 'Milk' THEN 1 END) = 0;
1 голос
/ 02 апреля 2019

использование не существует, я предполагаю, что у вас есть product_name столбец в таблице Tb_Requests

    select distinct c.* from Tb_Consumer c join Tb_Requests t1 on c.Con_ID=t1.Con_ID
    where not exists( select 1 from Tb_Requests t where c.Con_ID=t.Con_ID
                      and product_name='milk')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...