【问题标题】:Check if tuple is in every subquery result (Oracle SQL)检查元组是否在每个子查询结果中(Oracle SQL)
【发布时间】:2020-02-13 21:21:21
【问题描述】:

我正在尝试查找在每个拥有 130 多个座位的教室中举行的每个部分。现在,这只是找到在至少一个拥有超过 130 个座位的教室中举行的所有部分。

select * 
from section 
where (building, room_number) in (select building,room_number 
                                  from classroom where capacity > 130)

数据库方案

  • 教室(建筑、房间号、容量)
  • 部分(course_id、sec_id、学期、年份、建筑、room_number、time_slot_id)

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    您可以使用来实现:

        select sec_id, count(*) 
        from section a inner join
        (
         select building, room_number
         from 
         ( 
          select distinct building,room_number 
           from classroom where capacity > 130
         ) a
        )b on a.building = b.building  and a.room_number = b.room_number
    
    and 
    
        having count(*) = ( select count(*) 
                            from
                            (select distinct building,room_number 
                            from classroom where capacity > 130)a
                           )
        Group by sec_id
    

    【讨论】:

    • 我试过运行它,但它似乎不起作用。在同一个房间里可能有(并且现在有)来自不同学期的多个部分,因此计数 (*) 与可用教室的数量无关。
    • 这仍然存在同样的问题。 select count(*) from (select distinct building,room_number from chinese where capacity > 130) 返回 2,因为根据当前数据,有 2 个教室的容量 > 130,have 子句返回任何部分发生的部分的数量教室容量 > 130。
    • 添加了一个独特的元组建筑,room_number。请让我知道它是否有效。做了一些额外的改变
    • 应该这样做
    【解决方案2】:

    你可以使用`不存在

    select * 
    from section s 
    where not exists (select 1
                      from classroom c
                      where c.building = s.building and 
                            c.room_number = s.room_number and
                            c.capacity <= 130
                     ) ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-29
      • 1970-01-01
      • 2014-01-18
      • 2011-06-10
      • 2021-12-18
      • 2020-10-11
      • 1970-01-01
      相关资源
      最近更新 更多