| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1104 人关注过本帖
标题:sql查询问题
只看楼主 加入收藏
Bilicon
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2005-11-1
收藏
 问题点数:0 回复次数:11 
sql查询问题
现在我有一个表,
SNO PNO JNO
S1 P1 J1
S1 P2 J3
S2 P2 J1
S3 P3 J1


我想查询至少包含所有S1的PNO也就是(包含P1,P2)
的JNO在这里应该是J1吧。

这个用SQL语句应该怎么写呢?

搜索更多相关主题的帖子: sql 查询 
2005-11-07 16:32
volte
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:69
帖 子:1167
专家分:1316
注 册:2004-12-19
收藏
得分:0 

该题难度有点大
望大家思考思考、


大家都是朋友,有空就来坐坐!
2005-11-08 16:30
volte
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:69
帖 子:1167
专家分:1316
注 册:2004-12-19
收藏
得分:0 
select distinct pno
from table a
where not exists
(select *
from table b
where b.sno='s1' and not exists
(select *
from table c
where c.jno=a.jno and b.pno=c.pno)
如果大家还是不懂的话,看一下数据库原理那本书.

大家都是朋友,有空就来坐坐!
2005-11-08 16:35
zmjls
Rank: 1
等 级:新手上路
帖 子:377
专家分:0
注 册:2005-9-30
收藏
得分:0 
不是太明白你说的意思!!
说清楚嘛!!
select A.SNO from A where A.PNO=P1 and A.PNO=P2

对ASP、.NET、SQL情有独钟的情圣王子! 俺目标:睡觉睡到自然醒数钱数到手抽筋!
2005-11-08 16:40
Bilicon
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2005-11-1
收藏
得分:0 
下面这段语句好像是答案,两位版主可以帮我解释一下吗?小沙初学数据库,很多看不懂啊。

假设表名 tab1

select jno from
(SELECT pno,JNO from
tab1 t1 where pno in
(select pno from tab1 where sno = 'S1')
)T2 group by jno having count(JNO) = (select count(1) from tab1 where sno = 'S1')
2005-11-09 14:23
Bilicon
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2005-11-1
收藏
得分:0 

感觉volte版主的语句比小沙上面所写的要好,尽管这样,小沙还是希望大家帮我分析一下,上面那个语句

是什么意思。

2005-11-09 15:51
Bilicon
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2005-11-1
收藏
得分:0 

其实小沙还是不是很懂volte版主的那段语句的意思,可以说说思路嘛?

2005-11-10 15:17
nic
Rank: 2
等 级:新手上路
威 望:4
帖 子:175
专家分:0
注 册:2005-11-1
收藏
得分:0 
现在我有一个表,
SNO PNO JNO
S1 P1 J1
S1 P2 J3
S2 P2 J1
S3 P3 J1

是不是这样理解:
求JNO,每个相同JNO对应的所有不同的PNO等于或者多于S1对应的所有PNO。

declare @s1 integer,/*定义S1对应的PNO的个数*/
set @s1=(select count(pno) from table where sno='s1' group by pno) ,/*求S1对应的PNO的个数,去除重复的PNO*/

select jno from table
where pno in
(select pno from table where sno='s1')
GRUOP BY JNO,PNO/*去除重复的PNO,jno*/

HAVING COUNT(JNO)>=@S1 /*每个JNO对应的不同的PNO的数量应该大于等于@s1*/

2005-11-11 13:52
lili
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2005-11-11
收藏
得分:0 
select jno from
(SELECT pno,JNO from
tab1 t1 where pno in
(select pno from tab1 where sno = 'S1')
)T2 group by jno having count(JNO) = (select count(1) from tab1 where sno = 'S1')

其中:
SELECT pno,JNO from
tab1 t1 where pno in
(select pno from tab1 where sno = 'S1')
结果 t2
pno JNO
p1 j1
p2 j3
p2 j1

select count(1) from tab1 where sno = 'S1'
结果为
2
语句简化为
select jno
from t2
group by jno
having count(jno)=2

结果为
jno
j1

Bilicon对问题表述不清。
2005-11-11 14:24
nic
Rank: 2
等 级:新手上路
威 望:4
帖 子:175
专家分:0
注 册:2005-11-1
收藏
得分:0 
以下是引用lili在2005-11-11 14:24:25的发言:
select jno from
(SELECT pno,JNO from
tab1 t1 where pno in
(select pno from tab1 where sno = 'S1')
)T2 group by jno having count(JNO) = (select count(1) from tab1 where sno = 'S1')

其中:
SELECT pno,JNO from
tab1 t1 where pno in
(select pno from tab1 where sno = 'S1')
结果 t2
pno JNO
p1 j1
p2 j3
p2 j1

select count(1) from tab1 where sno = 'S1'
结果为
2
语句简化为
select jno
from t2
group by jno
having count(jno)=2

结果为
jno
j1

Bilicon对问题表述不清。

我想请教一下“group by jno having count(JNO) = (select count(1) from tab1 where sno = 'S1')”是不是应该用:
group by jno having count(JNO) >= (select count(1) from tab1 where sno = 'S1')
因为按照楼主所说是“至少包含”的意思。


2005-11-11 15:56
快速回复:sql查询问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039879 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved