Re: [课业] 列出参与所有专案的供应商名称 SQL巢状查询

楼主: cutekid (可爱小孩子)   2018-06-14 01:24:13
Q1 解法:
select t2.供应商名称
from 供应商 as t1,专案供应零件 as t2
where t1.供应商代号 = t2.供应商代号
group by t2.供应商名称
having count(distinct t2.专案代号) = ( select count(*) from 专案 )
说明:
1. 红色部份: 相同供应商下,所参与不同的专案个数
2. 黄色部份: 专案总数
3. 红色 = 黄色的时候,表示该供应商参与所有专案
Q2 解法:
select distinct t1.供应商名称
from 供应商 as t1,专案供应零件 as t2
where t1.供应商代号 = t2.供应商代号 and exists (
select *
from 供应商 as t3,专案供应零件 as t4,
where t3.供应商名称 = '一级棒' and t3.供应商代号 = t4.供应商代号
and t2.专案代号 = t4.专案代号
)
说明:
1. 黄色部份: “外层供应商”参与的专案 = “一级棒”所参与的专案
2. 红色部份: 供应商名称去除重复
※ 引述《gn01398532 (GOA)》之铭言:
: 此题已有人问过,但我还是不解要如何构筑此两层巢状查询
: Q1:列出参与所有专案的供应商名称?
: 题目所给表格:https://imgur.com/FqDfBeX
: 解法是用:不存在任何专案是没有参与的
: 解答就像此网站的解析:https://goo.gl/fZwjDj
: 巢状查询是要视为FROM后面的表格一起看吗?
: 为何第二个FROM后面是专案,最后一个FROM是看专案供应零件?
: 如果我先从最内层解析,
: 最后一个WHERE的条件是连结到两个更外层查询的表格(供应商和专案)
: 就代表我得同时看到最外层的 供应商.专案.专案供应零件 的表格
: 我的问题点在于要如何一步一步建立多层的巢状查询,
: 由内向外、由外向内,或是同时?
: 这种巢状查询要怎么练习呢?
:
作者: jaskone   2018-06-14 10:24:00
这解法好棒,耳目一新的感觉

Links booklink

Contact Us: admin [ a t ] ucptt.com