【问题标题】:SQL Query - to show all ChairNo's which are available and unavailableSQL Query - 显示所有可用和不可用的 ChairNo
【发布时间】:2015-12-07 16:12:39
【问题描述】:

有一个我一直在从事的小型影院项目,并希望在一个相当高级的 sql 查询方面得到一些帮助 - 我是一个完整的菜鸟 atm。

【问题讨论】:

  • left join booki1shows chairs
  • 我不是在 booki1.SeatNo = Chair.SeatNo 的左连接椅子上这样做吗??
  • 不,你只剩下参加节目和结果了。
  • 你能在查询中告诉我吗?我是一个非常困惑的菜鸟:S

标签: mysql sql select join where


【解决方案1】:

这是你的意思吗?

select SeatNo, 1 as available from Chair where SeatNo in (select SeatNo from Booki1)

Union 

select SeatNo, 0  as available from Chair where SeatNo not in (select SeatNo from Booki1)

【讨论】:

  • 感谢您选择我的答案,很高兴它对您有用:)
【解决方案2】:

您的查询有点混乱。椅子总是在那里,所以外部加入这张桌子是没有意义的。将其放在 FROM 子句中,并外连接预订(或在子查询中访问它们)。

select 
  seatno, 
  case when seatno in (select seatno from bookli1 where ddate = ... and ttime = ...) 
  then 0 else 1 end as available
from chair
order by seatno;

【讨论】:

    【解决方案3】:

    您的左连接应该可以工作,但您从错误的表开始作为基础。您的 CHAIRS(所有可能座位的列表)应该是第一张桌子,然后是 LEFT-JOIN 到实际预订的那些。 Left-Join = 我想要 LEFT(第一个)表中的记录,而不管右边(第二个表)是否匹配。

    select 
          Chair.SeatNo,
          (case when Show.DDate is null then 1 else 0 end) available
       from 
          chair
             left join booki1 
                on Chair.SeatNo = booki1.SeatNo
                left join show
                   on booki1.DDate = Show.DDate
                  AND booki1.TTime = Show.TTime
                  AND booki1.DDate = *insert show id here*;
    

    注意,如果您只查询 DATE,而不是同时查询 DATE AND TIME,您的“椅子”座位可能会错误地显示为不可用,因为它可能在下午 6 点放映时被占用,但在晚上 9 点放映时未被占用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      • 1970-01-01
      • 2017-02-12
      • 2022-09-28
      • 1970-01-01
      相关资源
      最近更新 更多