【问题标题】:SQL query on two tables using two column as keys使用两列作为键对两个表进行 SQL 查询
【发布时间】:2020-06-18 16:51:25
【问题描述】:

我开始学习 SQL(不是 MySQL,因为它似乎在某些部分有所不同) 我遇到了这个我无法弄清楚如何解决的问题

我有以下表格:

CREATE TABLE products(
    product char(30),
    color   char(30)
);

INSERT INTO products (product, color)
VALUES 
("table","brown"),
("chair","brown"),
("shelf","brown"),
("table","black"),
("chair","white");

CREATE TABLE suppliers(
    supplier char(30),
    product char(30),
    color   char(30)
);

INSERT INTO suppliers (supplier, product, color)
VALUES 
("s1","chair","brown"),
("s1","door","brown"),
("s1","table","brown"),
("s1","table","black"),
("s1","shelf","brown"),
("s2","chair","brown"),
("s3","table","brown"),
("s3","table","black"),
("s3","chair","brown"),
("s3","chair","white"),
("s3","shelf","white");

我需要使用 SQL 查找供应商以及他们可以提供给商店的棕色产品的数量以及 商店出售它们,按计数升序排序(产品表中的棕色产品) . 我从子查询开始,如下所示:

select supplier,COUNT(pb.product)
from (select product from products where color = "brown") as pb, (select supplier, product from suppliers where color = "brown") as sb
where pb.product == sb.product;

但我想不通,请帮忙。

这些表格上的结果需要是:

supplier| no_of_products
-------------------------
   s2   |   1
   s3   |   2
   s1   |   3

【问题讨论】:

  • 当你得到意想不到的结果时。停止尝试编写您的总体目标。找出你的误解是什么。--隔离第一个错误的子表达式及其输入和输出。 (调试基础。)不要只是转储错误的代码。尽可能提供最少的剪切和粘贴和可运行代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)从给定的代码中解释您的期望以及原因。
  • 感谢您的解释

标签: sql join select group-by count


【解决方案1】:

看起来你想要简单的聚合:

select supplier, count(*) no_brown_products
from suppliers 
where color = 'brown'
group by supplier

【讨论】:

  • 这个查询的执行顺序是什么?
  • @Darknifem:我不知道你说的执行顺序是什么意思...
  • 我才发现我说的不够具体,商店要卖这些产品,而且订单必须是重要的,对不起
  • @Darknifem:请编辑您的问题,以表格文本的形式显示您想要的结果。
  • 我更新了表格数据+添加了一个应该是的结果,谢谢
【解决方案2】:

这里是一个连接查询,希望它能解决你的问题

SELECT supplier,COUNT(pb.product)
FROM product pb
INNER JOIN supliers sp ON sp.color = pb.color
WHERE color = 'brown'
GROUP BY supplier;

【讨论】:

  • 当我尝试执行此查询时,我得到了不明确的列名:color,感谢您的帮助,我认为 @GMB 让奇迹发生了
  • @Darknifem 最好的办法是不使用 Varchar 来比较列,而是用所有颜色创建一个表 Color,并用表 product 和 supplier 的外键链接它们
【解决方案3】:

最后我需要以下内容:

select supplier, COUNT(s.product)
From suppliers s, products p
WHERE s.product = p.product and s.color = "brown" and p.color = "brown"
GROUP by supplier
order by COUNT(s.product);

【讨论】:

  • select supplier, COUNT(s.product) as no_of_products
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-09
  • 1970-01-01
相关资源
最近更新 更多