2012-12-17 47 views
0

我有兩種表。第一類有TBL$前綴,第二類有LOG$前綴。 如果有一個LOG$TABLE_NAME表,則表中還有一個TBL$TABLE_NAME表。因爲LOG$表是從TBL$表生成的。問題是當我想從神諭USER_TABLES表中搜索所有用戶表時。我想用名稱只搜索帶有2個參數的TBL$表。第一個是名稱,第二個是字符串('YES'或'NO),它表示被搜索的表是否具有相應的LOG$表。如果沒有這第二個參數,我的查詢看起來如此:Oracle db中的高級查詢

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$'