【问题标题】:Oracle sql join with 3 tablesOracle sql join 与 3 个表
【发布时间】:2020-09-15 03:37:27
【问题描述】:

lk_state 表

id  desc
MD  Maryland
FL  Florida
VA  Virginia
NY  NewYork
NJ  NewJersy
CA  California

用户表

user_ID Name    Active  State
01      AAA     1       MA  
02      BBB     1       MD
03      CCC     1       CA
04      DDD     1       NY
05      EEE     1       NJ
06      FFF     1       FL
07      GGG     1       FL

users_groups 表

id  group
01  10
02  20
03  20
04  30
05  20
06  10
07  20

我想加入可以输出 lk_state 表中状态的表。条件是只显示用户属于role=20的那些状态

输出应该是

id  desc
MD  Maryland
FL  Florida
NJ  NewJersy
CA  California

我尝试加入,但它为每个用户和组提供了多行。请帮我提供一个按要求显示的 oracle sql。

【问题讨论】:

  • “我尝试加入,但是......”如果你有显示你尝试了什么,有人可以指出你做错了什么。 @GMB 已经发布了一个可行的解决方案,但是从你自己的尝试中解决会是一个更好的学习体验。
  • 因为“users_groups”和“users”表之间存在一对一的关系,并且每个用户都有一个唯一的 state_id,所以加入这些表的结果不能包含每个用户的多行。所以我认为你错误地加入了表格。最好发送您的代码以查找可能的错误。

标签: java sql oracle join left-join


【解决方案1】:

试试这个:

SELECT DISTINCT s.*
FROM lk_states s, users u, users_groups g
WHERE s.id = u.state
  AND u.user_id = g.id
  AND g.group = 20

【讨论】:

    【解决方案2】:

    你试过这个吗?将关键字保留为列名并不理想

    Select s.* 
    from lk_states s
    JOIN users u ON u.state = s.id
    JOIN users_groups ug ON ug.id = u.user_id
    WHERE ug.u_group  = 20
    

    【讨论】:

      【解决方案3】:

      您可以使用exists 和相关子查询:

      select s.*
      from lk_states s
      where exists (
          select 1
          from users u
          inner join user_groups ug on ug.id = u.user_id
          where u.state = s.id and ug.group = 20
      )
      

      【讨论】:

        猜你喜欢
        • 2015-10-26
        • 2016-10-14
        • 1970-01-01
        • 2012-02-02
        • 2014-02-21
        • 1970-01-01
        • 2014-10-22
        • 2012-06-17
        • 1970-01-01
        相关资源
        最近更新 更多