SQL запрос к двум таблицам с использованием двух столбцов в качестве ключей - PullRequest
1 голос
/ 18 июня 2020

Я начал изучать 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

Ответы [ 3 ]

1 голос
/ 18 июня 2020

Вот запрос на соединение, надеюсь, он решит вашу проблему

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

1 голос
/ 18 июня 2020

Похоже, вам нужно простое агрегирование:

select supplier, count(*) no_brown_products
from suppliers 
where color = 'brown'
group by supplier
0 голосов
/ 19 июня 2020

В конце мне понадобилось следующее:

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);
...