数据查询问题

lijian8552 2009-06-04 11:13:02
 客户(客户号、客户名称、地址)客户号为主关键字
 产品(产品号、品名、单价、供应商);产品号为主关键字
 订单(订单号、客户号、产品号、日期、数量);订单号、客户号、产品号 为主关键字
如果我要(检索订购了全部产品的客户情况。)具体的SQL语句应该如何写。我想了好久都没想到什么合适的方法,请各位高手帮忙。
...全文
104 9 打赏 收藏 转发到动态 举报
写回复
用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))
版本:presto-server-0.214.tar软件版本 presto-cli-0.214-executableCentOS71、presto的起因 hadoop ---hdfs----MR(java)-----hivehive底层原理用MR,速度比较慢,公司hadoop集群主要集中于晚上到凌晨,平日工作时间负载不是很高。但在工作时间内,公司业务人员有实时查询的需求,现在主要借助于hive提供业务人员的查询。hive是基于MR类的SQL查询工具,他会输入的查询SQL解析为MapReduce,能极大的降低使用大数据门槛,让一般的业务人员可以直接准对大数据进行查询,但是有一个利弊,它的查询基于MR,会让人等待比较着急,等待的时间可能是几个小时或者一天。 spark基于内存提高改良的hive,sql,现在factbook在hive上面开发一套利器,准对hive可以通过sql语句快速查询,presto。2、Facebook为何开发Presto  Facebook的2011的数据仓库存储在少量大型hadoopfs集群,Hive是FaceBook在几年前专门为Hadoop打造的一款数据仓库工具,在以前,facebook的科学家和分析师一直靠hive进行数据分析.但hive使用MR作为底层计算框架,是专为批处理设计的,但是随着数据的不断增多,使用hive进行一个简单的数据查询可能要花费分钟或者几个小时,显然不能满足查询需求,FaceBooke也调研了其他比hive更快的工具,但是他们需要在功能有限的条件下做简单操作,以至于无法操作Facebook庞大的数据要求。2012年开始研究自己的框架--presto,每日可以超过1pb查询,而且速度比较快,faceBook声称Presto的性能比hive要好上10倍或者100倍,presto和hive都是facebook开发的 Presto是一个开源的分布式SQL查询引擎,适用于交互式查询数据量支持GB到PB字节。Presto的设计和编写完全是为了解决Facebook这样规模的商业数据仓库交互式分析和处理速度的问题Presto可以做什么 Presto支持在线数据查询,包括Hive kafka Cassandra关系数据库以及专门数据存储,一条Presto查询可以将多个数据源进行合并,可以跨越整个组织进行分析。Presto以分析师的需求作为目标,他们期望相应速度小于1秒到几分钟,Presto要么在使用速度的快的昂贵的商业方案,提高内存,要么是消耗大量的硬件进行快速查询。(128G 64G)本套课程教给如何在企业环境中使用Presto技术。

34,576

社区成员

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

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