2015-08-29 68 views
0

室的桌子>> ROOM_ID,標準如何從三個表

客桌>> guest_id,客人型

預訂表>> booking_id,ROOM_ID,guest_id

我的問題刪除是>刪除已預訂'豪華'房間的客人的記錄。 (豪華是一種標準)

請幫忙?做一個查詢我是一個SQL初學者。

+0

可能的重複[Join DELETE in MySql?如何?](http://stackoverflow.com/questions/2685211/join-delete-in-mysql-how-to) –

+0

不,我需要先加入這三個表 – sandy

回答

0

我假設你只是想從booking表中刪除。我還假設你需要從guest表中指定,否則根本不需要第三個表。

DELETE b 
FROM booking b 
INNER JOIN room r 
    ON r.room_id = b.room_id 
INNER JOIN guest g 
    ON g.guest_id = b.guest_id 
WHERE r.standard = 'Deluxe' 
    AND g.field = ???? 

但是,這是一個MS SQL擴展。 ANSI的方式是:

DELETE FROM booking b 
WHERE EXISTS (
     SELECT 1 
     FROM room r 
     WHERE r.room_id = b.room_id 
      AND r.standard = 'Deluxe') 
    AND EXISTS (
     SELECT 1 
     FROM guest g 
     WHERE g.guest_id = b.room_id 
      AND g.field = ????) 
+0

房間表>> room_id,標準 客人表>> guest_id,賓客類型 預訂表>> booking_id,room_id,guest_id <<<<這些是我的表格和列我需要刪除的客人誰已預訂'豪華'房間「,這意味着我需要刪除陣風表格記錄.. – sandy

+0

@sandy我不知道。 「已預訂'豪華'房間的客人」對我來說還不清楚。從邏輯上講,對我而言,只有從「預訂」中刪除纔是最有意義的。爲什麼你需要從'房間'刪除?沒有預訂房間意味着房間不存在?你爲什麼需要從'guest'中刪除?刪除'豪華'預訂是否意味着客人不能留在系統中供將來使用?如果他們預訂了其他房間標準呢?唯一對我有意義的刪除是預訂。 –

+0

@sandy另一方面,如果您確實需要從'room'或'guest'和'booking'中刪除,那麼您需要使用多個刪除語句。 MS SQL Server不允許您在單個語句中從多個表中刪除。 –