sql连接表并查找不存在的值

uoifb46i  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(342)

我在连接表以获取空值方面遇到了一些问题,我找不到我做错了什么。
案例:我正在尝试制作一个电影院系统,在这里我制作了与电影院匹配的实体。
我有一个大厅、一排和一张座位表,还有一张展示台,上面有电影的价值以及电影将在哪个大厅播放。为了把所有的东西结合在一起,我做了一个预订表,用来记录那个特定节目的座位。
我的实体是这样的:

我的问题是:我正在努力争取所有的免费座位,我可以争取所有的座位,但当我试图增加预订,以获得免费的我没有记录。
我的查询可以获取所有座位:

SELECT show.id            AS ShowID, 
       seat.id            AS SeatID, 
       seat.rowid         AS RowID, 
       show.hallid        AS HallId, 
       reservation.seatid AS Expr1 
FROM   show 
       INNER JOIN hall 
               ON show.hallid = hall.id 
       FULL OUTER JOIN seat 
                    ON hall.id = seat.hallid 
       LEFT OUTER JOIN reservation 
                    ON reservation.showid = show.id 
WHERE  ( show.id = 1 ) 
       AND ( reservation.seatid IS NULL ) 
ORDER  BY reservation.showid, 
          rowid
swvgeqrz

swvgeqrz1#

你需要 INNER 连接 Show , Hall , Row 以及 Seat 和一个 LEFT 加入 Reservation ,以便筛选出匹配的行:

SELECT s.Id AS ShowID, t.Id AS SeatID, t.RowId AS RowID, s.HallId
FROM Show s
INNER JOIN Hall h ON h.Id = s.HallId
INNER JOIN Seat t ON t.HallId = h.Id
INNER JOIN Row w ON w.HallId = h.Id AND w.Id = t.RowId 
LEFT JOIN Reservation r ON r.ShowId = s.Id AND r.HallId = h.Id AND r.SeatId = t.Id AND r.RowId = w.Id
WHERE (s.Id = 1) AND (r.SeatId IS NULL)
dbf7pr2w

dbf7pr2w2#

替换: INNER JOIN Hall ON Show.Id = Hall.Id FULL OUTER JOIN 使用: INNER JOIN Hall ON Show.HallId = Hall.Id FULL OUTER JOIN 虽然这可能不是你问题的完整答案,但我认为这可能也会给你带来问题。

相关问题