我有一個SQL查詢具有完全相同的代碼,但有兩個不同的表(AUDIT_TRAIL_ARCHIVE和AUDIT_TRAIL)。我使用「UNION ALL」來獲得一個結果。不要重複自己:相同的SQL查詢,但兩個不同的表
好程序員使用"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'
這裏你的目標是什麼:使用動態sql,例如相同的SQL但差異。表或重寫查詢,如弗羅林的例子? – Art
@ fyodor78第一種解決方案並不總是最好的。當然,您可以在選擇之前加入表格 - 但是,如果您想從每個表格檢索一行,爲什麼要構建一個100.000行的臨時表格?在動態SQL中查看,創建一個過程,建立一個查詢字符串並重用該過程。 – dognose