看板 Examination 關於我們 聯絡資訊
小弟之前有問過關於SQL not exists觀念問題,可能說明的不清楚,所以沒得到答案 not exists觀念我還不是非常清楚,如有蠢問題請見諒. Q1. 列出所有沒有銷售黑色零件的供應商名稱 以下是會用到的表格 http://imgur.com/FqDfBeX 書上給的答案為: http://imgur.com/F7xbk55 這個我可以理解,因為透過子查詢,可以將零件表格連接到對應的專案供應代號表格 讓專案供應代號表格可以有零件的資訊. 除此之外,子查詢裡可以透過外層表格(供應商)裡的供應商代號來判斷哪些供應商有提供 黑色零件 但是,以下題目為高考題目,卻不需要外層表格的資訊來判斷 http://imgur.com/gDGvS7z 子查詢沒用到外面的表格欄位,"那他怎麼判斷王小明是不是有修那些課程" ? 在子查詢裡,student會和select結合而得到那些學生修了那些課程且找出王小明這個學生 所以如果有王小明這個學生,course每次到內層都不會是empty阿 所以變成是"如果有王小明這個學生就不印出課程資訊" 因此,需要改寫成以下才是正確答案 http://imgur.com/wFuF1AR 不知道以上是否有誤? Q2. 關於在找"所有"的查詢裡不知道是否能改成只有一個not exists 例如: 列出參與所有專案的供應商名稱 我的SQL語法如下,不知道是否正確? 或是考試這樣寫OK? 外層有供應商和專案的所有可能組合,然後到子查詢裡找是否有不存在的組合 如果有,代表有供應商沒參加某個專案 http://imgur.com/JgkhKCF 謝謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.26.180.220 ※ 文章網址: https://www.ptt.cc/bbs/Examination/M.1459442497.A.B53.html
jachin: Q1.我覺得你的意思是對的,但是出題可能是出錯,或要考exi04/01 01:20
jachin: sts和in的差別,所以答題寫空白才是對的。04/01 01:20
jachin: Q2.大錯,如果可以只用一層,又何必用204/01 01:27
jachin: 層?中文意思就是負負得正→列出不存在以下表格的供應商名04/01 01:27
jachin: 稱(沒有參與任何專案的供應商代號)04/01 01:27
jachin: 您搞錯FROM的功能了,FROM沒那麼強大04/01 01:28
From不就是卡氏積功能?還是我哪裡誤會呢? 謝謝 ※ 編輯: fightforlive (27.246.147.219), 04/01/2016 18:21:24
lei70200: Q2怎麼看都是"列出所有沒參與任何專案的供應商名稱" 04/01 21:43
剛剛弄請楚自己的問題了= = 我的解法只會找到至少一個專案沒參與的供應商XD 是我自己弄錯了= = ※ 編輯: fightforlive (114.26.180.220), 04/01/2016 23:07:22
max60716: Q1:我想法是欄位名稱只有一個,所以他會自己進行join 04/08 12:02
max60716: Q2:你的寫法是"列出只要有沒參與到所有專案其中一項的 04/08 12:04
max60716: 供應商名稱" 04/08 12:04
max60716: TO:lei70200大大,你的說法,我寫法應該跟作者不太一樣 04/08 12:13
max60716: SELECT S.供應商名稱 FROM 供應商 S WHERE S.供應商代號 04/08 12:14
max60716: NOT IN (SELECT A.供應商代號 FROM 專案供應零件 A) 04/08 12:14