数据查询问题

lijian8552 2009-06-04 11:13:02
 客户(客户号、客户名称、地址)客户号为主关键字
 产品(产品号、品名、单价、供应商);产品号为主关键字
 订单(订单号、客户号、产品号、日期、数量);订单号、客户号、产品号 为主关键字
如果我要(检索订购了全部产品的客户情况。)具体的SQL语句应该如何写。我想了好久都没想到什么合适的方法,请各位高手帮忙。
...全文
108 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
幸运的意外 2009-06-04
  • 打赏
  • 举报
回复
用双重否定判断,不存在哪个产品,这个客户没有选。
select
客户号
from
客户 a
where
not exists
(select
产品号
from
产品 b
where
not exists
(select * from 订单 where 客户=a.客户 and 产品号=b.产品号)
)
usher_gml 2009-06-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Liyingyue_FFS 的回复:]
订购了全部产品的客户情况



SQL codeselect a.* from 客户 a
where 客户号 in
(select 客户号 from 订单 c where count(distinct c.产品号)=(select count(1) from 产品) group by 客户号)



思路:找到订单表里订购的产品种类数量等于产品种类数量的用户即可
PS:2楼少写了一个group by
[/Quote]

UP
lg3605119 2009-06-04
  • 打赏
  • 举报
回复

select
a.客户号,
max(a.客户名称) as 客户名称,
max(a.地址) as 地址
from 客户 a inner join 订单 b on a.客户号 = b.客户号
inner join 产品 c on c.产品号 = b.产品号
group by a.客户号
having count(distinct b.产品号) = (select count(distinct 产品号) from 产品)
SQL77 2009-06-04
  • 打赏
  • 举报
回复
SELECT * FROM 客户 
WHERE 客户号 IN
(SELECT 客户号 FROM
(SELECT 客户号,COUNT(DISTINCT 产品号)个数 FROM 订单 GROUP BY 客户号)AS T
WHERE T.个数=(SELECT COUNT(*) FROM 产品))
Liyingyue_FFS 2009-06-04
  • 打赏
  • 举报
回复
订购了全部产品的客户情况


select a.* from 客户 a 
where 客户号 in
(select 客户号 from 订单 c where count(distinct c.产品号)=(select count(1) from 产品) group by 客户号)


思路:找到订单表里订购的产品种类数量等于产品种类数量的用户即可
PS:2楼少写了一个group by
Liyingyue_FFS 2009-06-04
  • 打赏
  • 举报
回复
订购了全部产品的客户情况

select a.* from 客户 a 
where 客户号 in
(select 客户号 from 订单 c where count(distinct c.产品号)=(select count(1) from 产品))
xiequan2 2009-06-04
  • 打赏
  • 举报
回复
try

--不存在一个产品,这个客户没有订过

select 客户号 from 客户 a where not exists(select 产品 from 产品 b where not exists (select * from 订单 where 客户=a.客户 and 产品号=b.产品号))
ChinaJiaBing 2009-06-04
  • 打赏
  • 举报
回复
看看这样的效果

select distinct a.产品号,ISNULL( b.客户号,0) 客户号,isnull(c.客户名称) 客户名称,
ISNULL(c.客户地址,0) 客户地址 from 产品 a left join 订单 b
on a.产品号=b.产品号 left join 客户 c on b.客户号=c.客户号
sxc1001 2009-06-04
  • 打赏
  • 举报
回复

CREATE TABLE product
(
pid int identity(1,1) primary key,
productname nvarchar(20) not null
)

CREATE TABLE orderdetail
(
did int identity(1,1) primary key,
cusid nvarchar(20) not null,
pid int
)

CREATE TABLE custom
(
cusid int identity(1,1) primary key,
cusname nvarchar(20) not null,
)


//select * from product
//select * from orderdetail
//select * from custom

INSERT INTO custom Values('客户1')
INSERT INTO custom Values('客户2')

INSERT INTO product Values('产品1')
INSERT INTO product Values('产品2')
INSERT INTO product Values('产品3')
INSERT INTO product Values('产品4')
INSERT INTO product Values('产品5')

INSERT INTO orderdetail Values(1,1)
INSERT INTO orderdetail Values(1,2)
INSERT INTO orderdetail Values(1,5)
INSERT INTO orderdetail Values(2,1)
INSERT INTO orderdetail Values(2,2)
INSERT INTO orderdetail Values(2,3)
INSERT INTO orderdetail Values(2,4)
INSERT INTO orderdetail Values(2,5)


select cusid ,cusname
from custom
Where not exists (
select pid from product where not exists
(select * from orderdetail where pid=product.pid and cusid=custom.cusid))

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧