Sql 如何进行联接以获得此结果

Sql 如何进行联接以获得此结果,sql,join,Sql,Join,我在连接两个表以获得表C中的结果时遇到问题 方案A允许进入所有房间A 选项B允许进入A选项和B选项的所有房间 选项B允许进入A选项、B选项和C选项的所有房间 如何连接这些表table_A和table_B以获得类似table_C的内容 表A name option sex Ann A K Cezar B M Martha C K 表B Room option pool A river A gym

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

  • 方案A允许进入所有房间A
  • 选项B允许进入A选项和B选项的所有房间
  • 选项B允许进入A选项、B选项和C选项的所有房间
如何连接这些表table_A和table_B以获得类似table_C的内容

表A

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

Room        option
pool        A
river       A
gym         B
slide       B
spa         C
sauna       C
表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

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

select a.*, b.*
from table_A a join
     table_B b
     on b.option <= a.option
选择a.*,b*
从表A连接
表B
b.选择权
此处需要的输出是您的查询:)


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')
(1) 我假设您的意思是C提供对A、B和C的访问。(2)您应该用您正在使用的数据库进行标记。
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')