我是SQL语言的新手。刚学了四个月。
我的分配问题是找到不提供饮料的供应商。
使用LEFT OUTER JOIN
或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'饮料'的她的名字,而忽略了她的其他对应部分。 Output table如您所见,供应商“ Anne Heikkonen”仍在结果中显示,因为她同时提供饮料和其他饮料。
答案 0 :(得分:0)
使用类似
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)
答案 1 :(得分:0)
尽管我喜欢not exists
方法,但是让您的工作方法值得。
想法是:获取所有供应商并使用left join
来匹配饮料类别。然后使用where
子句查看是否存在匹配项。
所以看起来像这样:
SELECT S.ContactName
FROM Suppliers S LEFT JOIN
Products P
ON S.SupplierID = P.SupplierID LEFT JOIN
Categories C
ON C.CategoryID = P.CategoryID AND
C.CategoryName = 'Beverages' -- attempt the match
WHERE C.CategoryId IS NULL; -- find there is no match