Re: [SQL ] (考題類)查詢的問題

看板Database作者 (動靜:MSN暱稱為主)時間11年前 (2012/09/09 01:51), 編輯推噓0(003)
留言3則, 1人參與, 最新討論串4/10 (看更多)
>> (一)列出曾借閱「遠流」出版的書的所有員工的姓名。(10分) >> (二)列出曾借閱所有「遠流」出版的書的所有員工的姓名。(10分) 第二題 要找出 哪些員工 曾經借過 所有遠流出版的書 所以遠流出過幾本書,那麼,那個員工就要借過所有書... 所以,首先, 1.找出所有遠流出版的書 select 書本.書本編號 from 書本 where 出版商='遠流' 2.找出哪些員工借了全部遠流的書看過, 這邊常用的有兩種方式: a.用except比對結果集 (把各員工借過的遠流書 跟遠流全部書 做except), b.用書本筆數方式判定 (遠流出過n本書,那麼各員工借過的遠流書本編號的數目要相等) [當然要distinct過借書記錄的書本編號] 在這邊我使用書本數目來決定跟比對: select 借書記錄.員工編號 from (select distinct 員工編號,書本編號 from 借書記錄) as 借書記錄A join 書本 on 借書記錄A.書本編號=書本.書本編號 where 書本.出版商='遠流' group by 借書記錄A.員工編號 having count(*)=( select count(distinct 書本.書本編號) from 書本 where 出版商='遠流' ) 3.對回去員工姓名 : : (二) : : Select 姓名 : : From 員工 : : Where Not Exists ((Select 書本.書本編號 : : From 書本 : : Where 出版商='遠流' ) : : EXCEPT : : (Select 借書記錄.書本編號 : : From 借書記錄,書本 : : Where 員工.員工編號 = 借書記錄.員工編號 : : AND 借書記錄.書本編號 = 書本.書本編號 : : AND 出版商= '遠流' : : )) 你這邊錯誤的地方有幾個, 1.子敘述: a.因為except後的結果是 哪些書從沒被任何員工借過... b.必須先依據各員工做group,才知道各員工的借書狀況, 然後才針對各員工與遠流書做比較. 2.你的子敘述取到的只有書本編號,所以怎麼可能跟員工比的到結果.... : : (三) : : Select 姓名 : : From 員工 : : Where (Select COUNT(*) : : From 借書記錄,書本 : : Where 員工.員工編號 = 借書記錄.員工編號 : : AND 借書記錄.書本編號 = 書本.書本編號 : : AND 出版商= '遠流') >= 5 ); 其實這題也犯了上述2.的錯誤... : : -- : : ◆ From: 111.246.163.136 : : 推 Adonisy:你還要考慮,要用 ansi sql來寫 08/27 16:21 : : → Adonisy:而且你的題目好像不對 08/27 16:23 : : → tedcat:2不對...要先把遠流所有書找到後,再找哪個員工借過全部 08/29 01:23 : 抱歉...題目就是這個沒錯,這不是高特考題目 : 然後有大大可以解釋我第二題哪錯了嗎? -- 歡迎參觀我的相簿 http://www.pixnet.net/tedcat -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.229.71.5

09/09 01:55, , 1F
基本上,第二題就跟http://tinyurl.com/cxbjfo8 的3.類似
09/09 01:55, 1F

09/09 01:59, , 2F
或是常見的 請找出修過XXX老師全部課程的所有學生與其名字
09/09 01:59, 2F

09/09 02:00, , 3F
是一樣道理的
09/09 02:00, 3F
文章代碼(AID): #1GIuMtkq (Database)
討論串 (同標題文章)
文章代碼(AID): #1GIuMtkq (Database)