[英]DB2 SQL - Select all values of a table related to another table
也許我不清楚我要問的話題,所以這是我的問題:
我現在有三個表,分別是User
, User Role
和Role
,它們相互引用:
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
目前具有兩個角色: Admin
和Supervisor
我現在想做的是選擇所有具有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.