sql - 不要重复自己 : same SQL query, 而是两个不同的表

标签 sql oracle oracle10g union-all

我有一个代码完全相同的 SQL 查询,但有两个不同的表(AUDIT_TRAIL_ARCHIVE 和 AUDIT_TRAIL)。我使用“UNION ALL”来获得一个结果。

好程序员用"Don't repeat yourself"原则。优秀的程序员避免 WET(所有东西都写两次)。

如何用“不要重复自己”的原则重写这段代码?

SELECT REPLACE (ENTITY_KEY, 'rss_user_name=CN=', '')
 FROM    AUDIT_TRAIL_ARCHIVE AU
   INNER JOIN
      (SELECT RSS_USER_NAME
         FROM RSS_USER
        WHERE RSS_NAME = 'rmad'
              AND ADD_INFO_MASTER LIKE '%__47__UPN=%@richemont.com%') FALSCH
   ON REPLACE (AU.ENTITY_KEY, 'rss_user_name=CN=', '') =
         FALSCH.RSS_USER_NAME
WHERE     AU.RSS_NAME = 'rmad'
   AND AU.TABLE_NAME = 'rss_user'
   AND AU.ACTION = 'Insert'
   AND AU.ENTITY_KEY LIKE 'rss_user_name=CN=%'
   AND AU.ORIGIN != 'RSS'
UNION ALL
SELECT REPLACE (ENTITY_KEY, 'rss_user_name=CN=', '')
 FROM    AUDIT_TRAIL AU
   INNER JOIN
      (SELECT RSS_USER_NAME
         FROM RSS_USER
        WHERE RSS_NAME = 'rmad'
              AND ADD_INFO_MASTER LIKE '%__47__UPN=%@richemont.com%') FALSCH
   ON REPLACE (AU.ENTITY_KEY, 'rss_user_name=CN=', '') =
         FALSCH.RSS_USER_NAME
WHERE     AU.RSS_NAME = 'rmad'
   AND AU.TABLE_NAME = 'rss_user'
   AND AU.ACTION = 'Insert'
   AND AU.ENTITY_KEY LIKE 'rss_user_name=CN=%'
   AND AU.ORIGIN != 'RSS'

最佳答案

例如:

SELECT REPLACE (ENTITY_KEY, 'rss_user_name=CN=', '')
 FROM    (select * --or relevant columns
          from AUDIT_TRAIL_ARCHIVE AU
          union all
          select * 
          from AUDIT_TRAIL AU
           ) AU
   INNER JOIN
      (SELECT RSS_USER_NAME
         FROM RSS_USER
        WHERE RSS_NAME = 'rmad'
              AND ADD_INFO_MASTER LIKE '%__47__UPN=%@richemont.com%') FALSCH
   ON REPLACE (AU.ENTITY_KEY, 'rss_user_name=CN=', '') =
         FALSCH.RSS_USER_NAME
WHERE     AU.RSS_NAME = 'rmad'
   AND AU.TABLE_NAME = 'rss_user'
   AND AU.ACTION = 'Insert'
   AND AU.ENTITY_KEY LIKE 'rss_user_name=CN=%'
   AND AU.ORIGIN != 'RSS'

关于sql - 不要重复自己 : same SQL query, 而是两个不同的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15971225/

相关文章:

html - Oracle 数据库查询截断第一行

sql - 在 SQL 'LIKE' 命令中转义单引号的方法

oracle - 如何在返回 SELF 的函数的 pl/sql 对象类型中链接调用

mysql - 如何在 MySQL 中将行数据转置为列

sql - 如何查询具有 3 个标签的事件?

oracle - 使用 PL/SQL 生成 16 字节字符类型唯一 ID

sql - 如何查找一年中所有月份的第一个日期

sql - 将 Oracle 序列重置为现有列中的下一个值的最佳方法?

php - 如果 php 中的文件字段为空,如何提交没有错误的表单?

SQL:内部联接根据条件返回一行