加入两个在另一个表上找不到的数据表

问题描述 投票:0回答:1

我正在模拟电影院票务预订系统,并想知道如何显示尚未为电影的特定放映而预定的座位

我如何加入这些表以显示尚未为指定放映预定的座位?

我有下表

SEAT

  • Seat_ID
  • Number
  • Auditorium_ID(FK)

SEAT_RESERVED

  • ID(PK)
  • Seat_ID(FK)
  • Screening_ID(FK)

筛选

  • Screening_ID(PK)
  • 电影ID(FK)
  • Auditorium_ID(FK)

音频

  • Auditorium_ID(PK)
  • 名称
sql ms-access
1个回答
0
投票

您可以通过LEFT JOIN将观众席的座位列表进行给定筛选,以得到保留座位列表;未预留的席位将不匹配并且Seat_Reserved.IDNULL

SELECT *
FROM Screening C
JOIN Seat S ON S.Auditorium_ID = C.Auditorium_ID
LEFT JOIN Seat_Reserved R ON R.Screening_ID = C.Screening_ID AND R.Seat_ID = S.Seat_ID
WHERE C.Screening_ID = ?
  AND R.ID IS NULL

您还可以使用NOT EXISTS子句获得相同的结果:

SELECT *
FROM Screening C
JOIN Seat S ON S.Auditorium_ID = C.Auditorium_ID
WHERE C.Screening_ID = ?
  AND NOT EXISTS (SELECT * 
                  FROM Seat_Reserved R
                  WHERE R.Screening_ID = C.Screening_ID
                    AND R.Seat_ID = S.Seat_ID)

查询中的?是您感兴趣的筛选的占位符。

© www.soinside.com 2019 - 2024. All rights reserved.