求助!《数据库系统概论》上的一道习题,查询遇到难题了。

雷格 2012-12-11 12:32:21
《数据库系统概论》第二章第5(5)题
有一个SPJ表字段为供应商代码SNO,零件代码PNO,工程项目代码JNO,供应数量QTP
表如下:

表示某供应商 供应某种零件给某工程项目的数量为QTP

求至少用了供应商S1所供应的全部零件的工程号JNO

我理解的是在SPJ表中查询出供应商S1所提供的全部零件集合
SELECT DISTINCT PNO FROM SPJ WHERE SNO='S1';


再依次在SPJ表中查询出某个个工程项目JNO所用的全部零件集合

SELECT DISTINCT PNO FROM SPJ WHERE JNO='J1';


如果前面查询结果的集合是后面查询结果集合的子集,则J1工程满足条件。
这样依次检查J2,J3,J4

可是SQL没有集合的操作符合函数好像。也不能用循环、游标(书上这个地方还没讲游标和循环呢)。有人说大多数循环都是不必要的。所以这个应该不需要循环吧。

那这个怎么查询?

...全文
244 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2012-12-11
  • 打赏
  • 举报
回复
select distinct JNO from SPJ a where not exists ( select 1 from SPJ where SNO='S1' and PNO not in (select PNO from SPJ where JNO=a.JNO) )
雷格 2012-12-11
  • 打赏
  • 举报
回复
引用 1 楼 ACMAIN_CHM 的回复:
select distinct JNO from SPJ a where not exists ( select 1 from SPJ where SNO='S1' and PNO not in (select PNO from SPJ where JNO=a.JNO) )
我为什么想不到呢?我花了半天才看懂

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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