sql - 选择具有不同字段 SQL 的多个名称
问题描述
我是 SQL 语言的新手。刚学会4个月。
我的任务问题是找到不供应饮料的供应商。
使用LEFT OUTER JOIN
or 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”仍然出现在结果中,因为她既提供饮料又提供其他服务。
解决方案
使用类似的东西
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)
推荐阅读
- javascript - Sort() 正在改变我的原始数组。有不同的解决方法吗?
- math - 创建长度为 n 的布尔向量,其中 k 个真实值分散良好
- kentico - Kentico 12:检测可编辑区域是否包含任何小部件
- image - 尝试显示超过 10 个图像时,Flutter 应用程序崩溃
- python - ModuleNotFoundError:即使安装了 matplotlib,也没有名为“matplotlib”的模块
- angular - Angular 8 路由错误未找到 NgModule 元数据
- excel - 如何在没有 Rubberduck TestModules 的情况下交付 Excel VBA 应用程序?
- css - 找不到调整“React Lazy Load Image Component”的css的方法
- java - 在 SpringBoot 中调度 JMS 监听器
- javascript - 无法为 Symfony Webpack 设置热模块重新加载 HMR