首页 > 解决方案 > 选择具有不同字段 SQL 的多个名称

问题描述

我是 SQL 语言的新手。刚学会4个月。

我的任务问题是找到不供应饮料的供应商。

使用LEFT OUTER JOINor RIGHT OUTER JOIN(也INNER JOIN应该没问题)。

我得到了3张桌子。

SELECT 
    S.ContactName    
FROM 
    Suppliers AS S    
INNER JOIN    
    Products AS P ON S.SupplierID = P.SupplierID    
LEFT OUTER JOIN    
    Categories AS C ON C.CategoryID = P.CategoryID    
WHERE 
    C.CategoryName != 'Beverages'    
GROUP BY 
    S.ContactName    

我试过使用上面的代码,但它似乎返回了多个名称。例如,供应商“Anne Heikkonen”既供应饮料,也供应其他饮料。但是当我使用上面的 select 语句时,它只删除了具有 CategoryName 'Beverage' 的她的名字,而忽略了她的其他对应部分。 输出表如您所见,供应商“Anne Heikkonen”仍然出现在结果中,因为她既提供饮料又提供其他服务。

产品表

类别表

供应商表

标签: sqlsql-serverjoin

解决方案


使用类似的东西

select s.name
 from supplier
where not exists (select 1 
                    from product p
                    join category c on c.category_id = p.category_id
                   where c.category_name = 'Beverages'
                     and p.supplier_id = s.supplier_id)

推荐阅读