Oracle db中的高级查询

时间:2012-12-17 13:14:16

标签: sql oracle

我有两种表格。第一种排序具有TBL$前缀,第二种排序具有LOG$前缀。 如果有一个LOG$TABLE_NAME表,那么还有一个TBL$TABLE_NAME表。因为LOG$表是从TBL$表生成的。问题是当我想从oracles USER_TABLES表中搜索所有用户表时。我想只按名称搜索带有2个参数的TBL$表。第一个是名称,第二个是字符串('YES'或'NO),它指示搜索到的表是否具有相应的LOG$表。没有这个第二个参数,我的查询看起来是这样的:

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 ||'%'))

所以,如果你能帮助我将第二个参数迭代到查询中,那就太好了。

1 个答案:

答案 0 :(得分: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$'