[課業] 資料庫的 子查詢和 NOT EXISTS 關念求教

看板Examination作者 (fish118)時間11年前 (2014/03/09 15:39), 編輯推噓3(305)
留言8則, 4人參與, 最新討論串1/3 (看更多)
各位好, 小弟想請教一下各位 有關於子查詢中的 EXISTS 和 NOT EXISTS 的關念 底下的題目出自於唐箏資料庫應用第二回 P91頁 小弟雖然有講義, 但是沒有DVD, 所以是自己從文字中去理解 但是還是有些疑惑在, 所以麻煩各位指點一下 1.題目:列出所有不供應零件 P1 的供應商名稱 SELECT 供應商名稱 FROM 供應商 WHERE NOT EXISTS ( SELECT * FROM 專案供應零件 WHERE 供應商.供應商代號 = 專案供應零件.供應商代號 AND 零件代號 = 'P1' ) 這題小弟的理解, 先用子查詢, 找出所有有供應P1零件的供應商 在透過外面的 NOT EXIST 去找出 不供應零件P1 的供應商 舉例: 供應商中有 R1 = ( A, B, C, D, E), 供應 P1 零件的供應商有 R2 = (A, B, D) 不供應P1的零件商就是, C 和 E R1 - R2 = ( C, E ) 題目: 列出參與所有專案的供應商名稱 SELECT 供應商名稱 FROM 供應商 WHERE NOT EXISTS ( SELECT * FROM 專案 WHERE NOT EXISTS ( SELECT * FROM 專案供應零件 WHERE 供應商.供應商代號 = 專案供應零件.供應商代號 AND 專案.專案代號 = 專案供應零件.專案代號 ) ) 這題小弟覺得連從題目變成這樣解的概念都沒有 不曉得是不是哪裡沒念到 麻煩各位了 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.16.241.98

03/09 15:51, , 1F
把供應商沒有提供零件的專案踢掉,就是答案。
03/09 15:51, 1F

03/09 15:54, , 2F
少說一個,在把這種供應商踢掉。
03/09 15:54, 2F

03/09 16:10, , 3F
謝謝 O大, 只是小弟想瞭解 二題是怎麼去思考的
03/09 16:10, 3F

03/09 16:10, , 4F
因為二題不像一題那麼直覺, 小弟轉不過來
03/09 16:10, 4F

03/09 16:24, , 5F
第二題老師是把它改寫成
03/09 16:24, 5F

03/09 16:25, , 6F
沒有專案是供應商沒有參與的 這種負負得正的方法
03/09 16:25, 6F

03/09 19:16, , 7F
類似的題目我記得老師說都是因為沒有正面直接的寫法
03/09 19:16, 7F

03/09 19:16, , 8F
所以都是用樓上說的負負得正巢狀的寫法
03/09 19:16, 8F
文章代碼(AID): #1J71hDkT (Examination)
文章代碼(AID): #1J71hDkT (Examination)