簡體   English   中英

DB2 SQL-選擇與另一個表相關的表的所有值

[英]DB2 SQL - Select all values of a table related to another table

也許我不清楚我要問的話題,所以這是我的問題:

我現在有三個表,分別是UserUser RoleRole ,它們相互引用:

User
========
USER_ID | USER_NAME 
1       | User A
2       | User B

User Role
========
USER_ID | ROLE_ID
1       | 1
1       | 2
2       | 1

Role
========
ROLE_ID | ROLE_NAME
1       | Admin
2       | Supervisor

如您所見, User A目前具有兩個角色: AdminSupervisor我現在想做的是選擇所有具有Admin角色的用戶,然后sql結果應顯示與該用戶相關的所有其他角色。

說,sql是這樣執行的: select A.*, C.ROLE_NAME from User A, User Role B, Role C where A.USER_ID = B.USER_ID and B.ROLE_ID = C.ROLE_ID and B.ROLE_ID = '1'

上面的sql應該只顯示只有一個角色Admin User A

USER_ID | USER_NAME | ROLE_NAME
1       | User A    | Admin
2       | User B    | Admin

但是我想要的是,在Admin旁邊,sql結果還應該顯示具有ROLE_NAME = Supervisor User A

USER_ID | USER_NAME | ROLE_NAME
1       | User A    | Admin
1       | User A    | Supervisor
2       | User B    | Admin

有任何想法嗎?

exists用途:

with ur as (
      select u.*, C.ROLE_NAME
      from User u join
           User_Role ur
           on u.user_id = ur.user_id join
           Role r 
           on r.role_id = ur.role_id
     )
select ur.*
from ur
where exists (select 1
              from ur ur2
              where ur2.user_id = ur.user_id and ur2.role_name = 'admin'
             );

另外, 切勿FROM子句中使用逗號。 始終ON子句中的條件使用正確的顯式JOIN語法。

其次,使用有意義的表別名,而不要使用諸如“ a”,“ b”和“ c”之類的任意字母。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM