0

我有两种表。第一个排序有一个TBL$前缀,第二个排序有一个LOG$前缀。如果有一张LOG$TABLE_NAME桌子,那么也有一张TBL$TABLE_NAME桌子。因为LOG$表是从TBL$表中生成的。问题是当我想从 oraclesUSER_TABLES表中搜索所有用户表时。我只想按名称搜索TBL$具有 2 个参数的表。第一个是名称,第二个是一个字符串(“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 ||'%'))

因此,如果您可以帮助我将第二个参数集成到查询中,那就太好了。

4

1 回答 1

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$'
于 2012-12-17T13:20:50.117 回答