作者TeemingVoid (TeemingVoid)
看板Database
标题Re: [SQL ] 请教一个sql的写法
时间Fri Dec 23 21:52:29 2011
※ 引述《Arim (Arim5566)》之铭言:
: 各位版友好
: 如果我的schema如下
: Client(cid,cname)
: Product(pid,pname)
: O(oid,cid) /*订单,每一个cid只会有一个oid*/
: OD(oid,pid) /*订单明细*/
: 想请教一下
: 如果我要将 "所有pid都有购买的cname"给列出来
: 应该要怎麽写呢?
我可能会这样写,提供给您参考:
1. 列出客户们订购的(不重复)产品清单 (下列程式的 ClientsBuyWhat)。
2. 以第一点的资料为基础,统计各个客户订购产品的笔数。
3. 如果订购的笔数 = 产品笔数 ==> 我们想要的资料。
程式如下(以 MS-SQL 2005/2008 为例),希望会有帮助:
with ClientsBuyWhat as
(
select distinct c.cid, cname, od.pid
from Client c join o on o.cid = c.cid
join od on od.oid = o.oid
)
select cid, cname
from ClientsBuyWhat
group by cid, cname
having COUNT(*) = (select COUNT(*) from Product)
go
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.170.128.237
1F:推 Arim:受教了 谢谢:) 12/23 22:41