【问题标题】:How to make a join in order to get this result如何进行连接以获得此结果
【发布时间】:2020-01-29 12:36:41
【问题描述】:

我在连接两个表以获得 Table_C 中的结果时遇到问题。

  • 选项 A 允许访问所有房间 A
  • 选项 B 允许访问 A 选项和 B 选项的所有房间
  • 选项 B 允许访问 A 选项和 B 选项和 C 选项的所有房间

如何加入这些表 table_A 和 table_B 以获得类似 table_C 的东西

table_A

name    option  sex
Ann     A       K
Cezar   B       M
Martha  C       K

table_B

Room        option
pool        A
river       A
gym         B
slide       B
spa         C
sauna       C

table_C

name    option  sex Room
Ann     A       F   Pool
Ann     A       F   River
Cezar   B       M   Pool
Cezar   B       M   River
Cezar   B       M   Gym
Cezar   B       M   Slide
Martha  C       F   Pool
Martha  C       F   River
Martha  C       F   Gym
Martha  C       F   Slide
Martha  C       F   Spa
Martha  C       F   Sauna

【问题讨论】:

  • (1) 我假设您的意思是 C 允许访问 A、B 和 C。(2) 您应该使用您正在使用的数据库进行标记。

标签: sql join


【解决方案1】:

您可以在JOINs 中使用不等式。这似乎是你想要的:

select a.*, b.*
from table_A a join
     table_B b
     on b.option <= a.option

【讨论】:

    【解决方案2】:

    你想要的输出是你的查询:)

    create table table_A (name varchar(10),[option] varchar(1),sex varchar(1))
    create table table_B(Room varchar(10),[option] varchar(1))
    
    insert into table_A VAlues ('Ann', 'A','K')
    insert into table_A VAlues ('Cezar','B', 'M')
    insert into table_A VAlues ('Martha' ,'C'  ,'K')
    
    insert into table_B values('pool '       ,'A')
    insert into table_B values('river'       ,'A')
    insert into table_B values('gym  '       ,'B')
    insert into table_B values('slide'       ,'B')
    insert into table_B values('spa  '       ,'C')
    insert into table_B values('sauna'       ,'C')
    
    
    
    select a.[name],a.[option],a.sex,b.Room from table_A A
    INNER join table_B b on a.[option] >= b.[option]
    

    【讨论】:

      【解决方案3】:

      Gordon 的解决方案适用于该示例数据。
      由于 A

      但如果需要更明确:

      select a.name, b.[option], a.sex, b.Room
      from table_A a 
      join table_B b
           on b.[option] = a.[option] -- include same option
           or b.[option] = 'A'  -- always include option A rooms
           or (b.[option] = 'B' and a.[option] = 'C')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-06
        • 2021-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多