2012-12-17 3 views
0

두 종류의 테이블이 있습니다. 첫 번째 정렬은 TBL$ 접두어이고 두 번째 정렬은 LOG$ 접두어입니다. 테이블보다 LOG$TABLE_NAME 테이블이있는 경우 TBL$TABLE_NAME 테이블도 있습니다. LOG$ 테이블은 TBL$ 테이블에서 생성되기 때문에. 문제는 oracles USER_TABLES 테이블에서 모든 사용자 테이블을 검색하려고 할 때입니다. 2 개의 매개 변수가있는 TBL$ 테이블 만 이름으로 검색하려고합니다. 첫 번째는 이름이고 두 번째는 검색된 테이블에 해당 LOG$ 테이블이 있는지 나타내는 String ('YES'또는 'NO')입니다. 이 두 번째 매개 변수를 사용하지 않으면, 내 쿼리는 너무 같습니다Oracle 데이터베이스의 고급 쿼리

SELECT ut.table_name AS id, 
     utc.comments AS comments 
    FROM user_tables ut 
    LEFT JOIN user_tab_comments utc 
    ON ut.table_name = utc.table_name 
WHERE SUBSTR(UPPER(ut.table_name), 1, 4) = 'TBL$' 
    AND TRIM(UPPER(ut.table_name)) LIKE TRIM(UPPER('%'|| :table_name ||'%')) 

을 그래서, 당신이 좋은 것 쿼리에이 두 번째 매개 변수를 itegrate하는 데 도움 수 있다면.

+2

이 어떤 문제 것은 쿼리로 발생하는? – chuff

답변

2

당신은 할 수있는 왼쪽 외부 자체 조인과 존재를 확인 :

SELECT 
    ut.table_name AS id 
, CASE WHEN ut_log.table_name IS NOT NULL THEN 'YES' ELSE 'NO' END has_log 
FROM user_tables ut 
LEFT JOIN user_tables ut_log ON ut_log.table_name = replace(ut.table_name, 'TBL$', 'LOG$') 
WHERE SUBSTR(UPPER(ut.table_name), 1, 4) = 'TBL$'