[英]SQL Query with 2 tables with many to many relations and one condition must be met
我有我的guests
餐桌,其中存儲了入住酒店的客人的姓名。
此外,還有另一張帶rooms
的桌子。 此表存儲每位客人和每次訪問酒店的名為status
的列,這些值可能是取消、支付、預訂等。
我還有一個 pivot 表,它存儲客人和酒店房間之間的關系(多對多)。 是否為每條記錄存儲了guest_id
和room_id
。
我需要一個查詢,向我顯示所有僅支付狀態且沒有任何其他狀態的房間的客人(ID、姓名)。 只是那些付費的。
問題是,一位客人可以(實際上有)取消和預訂房間,所以如果一位客人有一間非付費房間,他不應該被包括在結果中。
這是我到目前為止所擁有的:
select `id`, `name`
from `guests`
where `type` = 'executive' and exists (
select * from `rooms`
inner join `guest_room_map`
on `rooms`.`id` = `guest_room_map`.`room_id`
where `guests`.`id` = `guest_room_map`.`guest_id`
and `status` = 'paid'
) order by `name` desc;
上面的查詢有效,但我得到了也有預訂狀態的客人的記錄,我不想要他們。 我只需要那些只支付了狀態而沒有其他狀態的其他房間的人。
提前致謝!
我在 WHERE 子句中添加了一個查詢,以獲取所有具有除已付費狀態的房間的客人 ID
select `id`, `name`
from `guests`
where `type` = 'executive' and exists (
select * from `rooms`
inner join `guest_room_map`
on `rooms`.`id` = `guest_room_map`.`room_id`
where `guests`.`id` = `guest_room_map`.`guest_id`
and `status` = 'paid'
) and `id` NOT IN (
select `guest_room_map`.`guest_id` from `rooms`
inner join `guest_room_map`
on `rooms`.`id` = `guest_room_map`.`room_id`
where `guests`.`id` = `guest_room_map`.`guest_id`
and `status` != 'paid'
) order by `name` desc;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.