SQL新手求助:关联PRODUCT与VENDOR表查询供应商产品数
查询供应商及其对应产品数量的SQL语句
嗨,作为SQL新手,这个需求其实挺典型的,我来帮你写好查询语句,再逐段解释清楚每个部分的作用,这样你能理解背后的逻辑~
最终SQL语句
SELECT V.vendor_name, V.vendor_phone, COUNT(P.Product_ID) AS product_count FROM VENDOR V LEFT JOIN PRODUCT P ON V.Vendor_ID = P.Vendor_ID GROUP BY V.Vendor_ID, V.vendor_name, V.vendor_phone;
逐部分解释
- 表别名:我给
VENDOR起了别名V,PRODUCT起了别名P,这样写起来更简洁,避免重复敲长表名。 - LEFT JOIN:用
LEFT JOIN而不是普通的JOIN,是为了确保即使某个供应商没有任何产品,也会出现在查询结果中,对应的product_count会显示为0。如果用普通JOIN,没有产品的供应商就会被过滤掉,这应该不是你想要的结果~ - COUNT(P.Product_ID):这里统计产品表的
Product_ID(或者任何产品表的非空列都可以),而不是用COUNT(*)。因为如果用COUNT(*),即使供应商没有产品,LEFT JOIN会生成一条带NULL的行,COUNT(*)会把它算成1,而我们需要的是0,所以用产品表的列来计数,NULL值不会被统计进去,就能得到正确的结果。 - GROUP BY:
GROUP BY用来把相同供应商的记录归为一组,这样COUNT函数就能计算每个组(也就是每个供应商)的产品数量。这里我把V.Vendor_ID也加入分组,是因为可能存在不同供应商同名的情况,用主键分组更准确;如果你的业务里vendor_name是唯一的,只分组vendor_name和vendor_phone也可以,但主键分组是更稳妥的做法。
如果你只想看有产品的供应商,把LEFT JOIN改成INNER JOIN就行,不过通常这种需求都会希望包含所有供应商~
内容的提问来源于stack exchange,提问作者Abduazim Sobitov
相关产品推荐
相关产品推荐

