根据国家/地区,我想要一个供应商不止一个的供应商清单,而我希望这些供应商的产品(可以是任何一个)价格低于20的供应商。
供应商表:
supplier_name id country
A 1 germany
B 2 london
C 3 london
D 4 germany
产品表:
products price id
onion 30 1
tomato 20 1
potato 3 1
pulses 60 2
rice 18 2
spice 100 2
jacket 300 3
fruits 8 4
我的SQL查询这个问题:
select id,
supplier_name,
count(country) as sd ,
( select distinct s.id
from suppliers s
inner join products p on s.id=p.id
where price<20) as d
from suppliers
group by country
having sd > 1;
这是我的查询,但列d和sd打印为多余的列,我不需要
谁能帮我用内部联接编写更好的非相关查询?
我想要一个国家有多个供应商的供应商清单,而我希望这些供应商的产品(可以是任何一个)价格低于20的供应商。
查看上面的供应商表,其中德国有两个以上的供应商A,D,从这些供应商中我希望那些产品(可以是任何一个)的价格低于20的供应商。
所以输出将是:
suppliers_name id
A 1
B 2
D 4
您的查询在Access(我仅有的查询引擎)中惨败。考虑:
SELECT id, supplier_name
FROM Suppliers INNER JOIN (
SELECT country, Count(ID) AS CntID
FROM Suppliers GROUP BY country) AS C
ON Suppliers.country = c.country
WHERE CntID>1 AND id IN (SELECT supID FROM Products WHERE price<20)
ORDER BY ID;
或者
SELECT DISTINCT Suppliers.id, Suppliers.supplier_name
FROM Products
INNER JOIN (Suppliers INNER JOIN (SELECT country, Count(ID) AS CntID
FROM Suppliers GROUP BY country) AS C
ON Suppliers.country = C.country)
ON Products.supID = Suppliers.ID
WHERE C.[CntID]>1 AND Products.price<20;
我将“产品”中的ID重命名为supID。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句