2012-12-17 28 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$'