我有两种表格。第一种排序具有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 ||'%'))
所以,如果你能帮助我将第二个参数迭代到查询中,那就太好了。
答案 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$'