我需要帮助解决查询“列出请求至少一种产品但不要求牛奶的客户名称。我有一个粗略的开始,但我不知道如何完成它。这是我到目前为止所拥有的。
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
而不是使用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;
使用不存在我假设你在表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')