2014-11-30 8 views
0

다음 표 이름은 단지 예를 들어 있다면 ...SQL 체크 테이블 A의 행 테이블 B에 존재 또는 C

나는 테이블 사용자, 테이블 SUB_USER_1 및 테이블 SUB_USER_2을 가지고 상상해보십시오. 테이블 SUB_USER_1 (2)에는 USERS 테이블에 연결하는 열 ID와 열 USER_ID가 있습니다.

사용자가 유형 1 또는 2인지 여부를 알고 싶다면 SUB_USER_1 또는 SUB_USER_2 테이블에 있는지 확인하고 가장 좋은 방법은 무엇입니까?

미리 감사드립니다.

+0

저장 프로 시저가 필요하다는 표시가 없으므로'plsql' 태그가 제거되었습니다. –

답변

2

은 내가 selectcase를 사용하여이 작업을 수행 할 것입니다 :

select (case when su1.id is not null and su2.id is not null then 'BOTH' 
      when su1.id is not null then 'TYPE1' 
      when su2.id is not null then 'TYPE2' 
      else 'Neither' 
     end) 
from (select 999 as user_id from dual) u left join 
    sub_user_1 su1 
    on su1.id = u.user_id left join 
    sub_user_2 su2 
    on su2.id = u.user_id 

이 서브 타입 테이블에 행이 중복되지 않는 것으로 가정합니다. 집계를 사용하여 처리 할 수 ​​있습니다.

1
SELECT 'SUB_USER_1' whichTable FROM SUB_USER_1 WHERE user_id = 999 
UNION ALL 
SELECT 'SUB_USER_2' FROM SUB_USER_2 WHERE user_id = 999; 

사용자 999의 데이터를 보유하고있는 테이블을 알려줍니다.

는 사용자 데이터와 Sub_User 테이블로 작업하고 싶었다면

필요한 경우 당신은

SELECT AllSub.*, U.* 
FROM 
    (SELECT user_id, column1 alias1, column2 alias2, ... FROM Sub_User1 
    UNION ALL 
    SELECT user_id, column3, column4, ... FROM Sub_User1) AllSub 
JOIN User U 
    ON AllSub.user_id = U.id; 

, 외부 하위 선택의 특정 USER_ID로 좁혀 또는 수 있고, 호환 열이 있습니다.

+0

나는 사용자가 하위 테이블에 존재하지 않을 가능성을 고려하기 때문에 단순함과 효율성을 위해 답을 고맙게 생각한다. – chester

+0

물론 충분합니다. 고마워요. 그러나 데이터가 없으면 아무 것도보고되지 않습니다. SQL의 일반적인 방법 인 것 같습니다. 그럼에도 불구하고 Gordon은 모든 옵션을 충분히 설명합니다. – Abecee

관련 문제