我需要一些帮助解决SQL查询,我需要列出请求至少一个产品但不要求牛奶的消费者的名字

问题描述 投票:-4回答:2

我需要帮助解决查询“列出请求至少一种产品但不要求牛奶的客户名称。我有一个粗略的开始,但我不知道如何完成它。这是我到目前为止所拥有的。

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
sql sql-server sqliteopenhelper
2个回答
1
投票

而不是使用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
投票

使用不存在我假设你在表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')
© www.soinside.com 2019 - 2024. All rights reserved.