SQL查询从表中排除某些值

met*_*lah 4 sql

在此输入图像描述

大家好,我正在建立一个房间分配系统,检查一个房间是否在给定日期可用.有大约20个独特的房间ID,我只是作为几个以上的片段包括在内.

因此,例如,如果用户键入2012-01-01的日期,我希望从结果中排除room_id为1,因为如上所述,它已经在该日期预订.

在某种意义上,在用户的输入日期之间找到的任何匹配都应该导致从列表中排除相应room_id的整个列表.

我使用下面的SQL查询:

SELECT DISTINCT room_id
FROM room_booking
WHERE date_booked<>'$date'
Run Code Online (Sandbox Code Playgroud)

不幸的是它不起作用,因为虽然它排除了单行的结果,但它包含了给定room_id的其余结果?

Jus*_*ave 12

你可以用一个 NOT EXISTS

SELECT DISTINCT room_id
  FROM room_booking rb1
 WHERE NOT EXISTS( SELECT 1
                     FROM room_booking rb2
                    WHERE rb2.date_booked = <<date>>
                      AND rb2.room_id     = rb1.room_id )
Run Code Online (Sandbox Code Playgroud)

或者a NOT IN

SELECT DISTINCT room_id
  FROM room_booking
 WHERE room_id NOT IN (SELECT room_id
                         FROM room_booking rb2
                        WHERE rb2.date_booked = <<date>>)
Run Code Online (Sandbox Code Playgroud)


Che*_*min 11

没试过这个,但是这里有

SELECT DISTINCT room_id
FROM room_booking
WHERE room_id NOT IN 
    (SELECT DISTINCT room_id
     FROM room_booking
     WHERE date_booked = '$date'
    )
Run Code Online (Sandbox Code Playgroud)