[英]How to get “all” in a sql query
这是数据库架构
Parts
(pid:integer, pname:string, year:integer, price:integer)
Suppliers
(sid:integer, sname: string, state:string, zipcode:string)
Orders
(pid:integer, sid:integer, quantity:integer)
查找所有州提供的零件的名称。
查找提供所有零件的供应商的邮政编码。 列出每个邮政编码一次。
对于在“全部”问题上如何解决这些问题,我有些困惑。 我不知道如何编写一个可以包含所有内容的查询。
我们正在学习除法和聚合。
有时英语用法可能很微妙,“ all”被用作“ any”的同义词。 在这种情况下,这是不正确的,因此大多数答案都遗漏了您问题的重点。 确保两组具有多行的情况正确的一种方法是将它们加起来,然后比较总数。 这就是两个查询中所有count()表达式的原因。
这是邮政编码问题的一种可能性:
select zipcode
from Suppliers
where
(select count(pid) from Parts) =
(select count(distinct pid) from Orders where sid = Suppliers.sid)
这是第二个:
select name
from Parts
where pid in (
select Orders.pid,
from Suppliers inner join Orders on Orders.sid = Suppliers.sid
group by Orders.pid
having
count(distinct Suppliers.state) =
(select count(distinct state) from Suppliers)
)
**To get all names using mysql**
从零件中选择p.pname。p.pid = o.pid join上的o联接订单o.o.sid = s.sid上的供应商s,其中s.state不为null;
**To get distinct names**
从零件中选择不同的p.pname p联接订单o在p.pid = o.pid联接上o在o.sid = s.sid上的供应商s,其中s.state不为null;
或您可以使用'in'关键字..像从零件中选择p.pname p加入订单o在p.pid = o.pid加入供应商在o.sid = s.sid上,其中s.state在(从中选择不同的状态供应商);
“所有状态”表示不要过滤状态。 而如果他们说“ for Ohio”,您将添加一个WHERE子句,例如:
WHERE ZipCode in (SELECT Zip FROM Zips WHERE State = 'OH')
该子查询从假定的zips表中获取您的状态,替换为,但是您将zip转换为状态。 但是,就您而言,您还是不需要。
Select pname from Parts where pid IN (Select pid from Orders where Suppliers.sid = Orders.sid)
对于第二个类似。 “全部”是指,您不应在该字段上添加where子句。
HTH!
-选择所有州提供的零件名称-
select t.pid, max(pname) from
(
-- states, where pname was supplied from --
select distinct p.pid, p.pname, s.state
from
Parts p
join
Orders o on o.pid = p.pid
join
Suppliers s on s.sid = o.sid
) t
group by t.pid
-- part was supplied from all state if --
having count(t.state) =
(
-- total number of states
select count(distinct state) from Suppliers
)
-选择提供所有零件的供应商的邮政编码-
select max(s.zipcode)
from
Suppliers s
join Order o
on o.sid = s.sid
group by s.sid
having count(distinct o.pid) = (select count(distinct pid) from Parts)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.