當我們想知道一個集合不存在後要顯示另一個集合,就可以使用Not Exists

SQL格式如下

Select  ...

From  ...

Where Not Exists ( Select  ...

                             From   ...

                             Where      ....   )

看完還是不懂怎麼用,那舉個找"空床位"例子

SELECT     TOP (1) building_no AS 樓棟, room_no AS 房間, bed_no AS 床位

FROM       dbo.room_bed

WHERE     (room_type = '肢障') AND(NOT EXISTS

                          (SELECT     *                                              

                           FROM       dbo.application_list LEFT OUTER JOIN dbo.boarder ON dbo.application_list.application_no = dbo.boarder.application_no LEFT OUTER JOIN dbo.check_records ON dbo.boarder.boarder_no = dbo.check_records.boarder_no

                           WHERE      (dbo.check_records.room_no = dbo.room_bed.room_no) AND(dbo.check_records.bed_no = dbo.room_bed.bed_no) AND (dbo.application_list.semester LIKE '102%')))

 

首先我在內部Select用Left outer join把三個表格湊起來,想當然會有中間NULL值,至於Where基本要房號和床號相同時顯示,至於最後一條是小迷增加,想知道102開頭有哪些訂過床位資料

然後在這內部Select外再加Not Exists,意思是不存在(102開頭有哪些訂過床位資料),所以沒在102開頭訂過床位會顯示,然而遇到Top (1)代表只顯示前面1筆資料

 

這舉例想著挺辛酸的,因為虧我腦汁動這麼久才生出檢視,結果被專題評審老師說句"你們資料表規劃錯誤"。

其實老師說的沒錯,當初規劃錯誤讓我程式偏難寫,而且進階功能弄不出來,但是規劃要經驗阿阿阿阿阿! 

arrow
arrow
    全站熱搜

    o迷苓o 發表在 痞客邦 留言(0) 人氣()