取值后如何阻止数据库结果重新出现

时间:2019-04-26 21:42:59

标签: sql sql-server

我有一个租车项目,当从数据库表CAR中租用car ID作为主键的可用车时,我将数据插入表RESERVATION中,其中reservation ID作为主键,并且{ {1}}作为car ID表中的外键。

但是,我不希望我刚租出的汽车显示为“可用的汽车”来出租。我应该写什么查询才能隐藏它?

car

2 个答案:

答案 0 :(得分:5)

您无需更新任何表格即可隐藏汽车。

在选择要显示的可用汽车列表时,请使用以下SQL:

SELECT * FROM Car WHERE CarID NOT IN (SELECT CarID FROM Reservation)

这将排除所有已预订的汽车。无论如何,这是基本思想。

预订可能仅在特定时期内有效,并且用户可能试图保留不同的时期,因此您可能需要更复杂的东西,例如:

SELECT * FROM Car WHERE CarID NOT IN
(
    SELECT CarID
    FROM   Reservation
    WHERE  StartDate < @DesiredEndDate
    AND    EndDate   > @DesiredStartDate
)

这将提供未出现在预订中且与用户期望的预订时间重叠的汽车列表。

答案 1 :(得分:0)

您可以将联接查询编写为:

Select C.carID
from @Car C
Left join @Reservation R on C.carID = R.carID
where R.reservationID is null