簡體   English   中英

SQL 查詢具有多對多關系且必須滿足一個條件的 2 個表

[英]SQL Query with 2 tables with many to many relations and one condition must be met

我有我的guests餐桌,其中存儲了入住酒店的客人的姓名。

此外,還有另一張帶rooms的桌子。 此表存儲每位客人和每次訪問酒店的名為status的列,這些值可能是取消、支付、預訂等。

我還有一個 pivot 表,它存儲客人和酒店房間之間的關系(多對多)。 是否為每條記錄存儲了guest_idroom_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM