Tôi có một truy vấn SQL với cùng mã chính xác, nhưng hai bảng khác nhau (AUDIT_TRAIL_ARCHIVE và AUDIT_TRAIL). Tôi sử dụng "UNION ALL" để có một kết quả.Không lặp lại chính mình: cùng một truy vấn SQL, nhưng hai bảng khác nhau
Người lập trình giỏi sử dụng nguyên tắc "Don't repeat yourself". Người lập trình giỏi tránh WET (viết mọi thứ hai lần).
Làm cách nào để viết lại mã này bằng nguyên tắc "Không lặp lại chính mình"?
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'
Mục tiêu của bạn ở đây là gì: để sử dụng sql động, ví dụ: cùng sql nhưng khác. bảng hoặc viết lại truy vấn như trong ví dụ của Florin? – Art
@ fyodor78 Giải pháp đầu tiên không phải lúc nào cũng tốt nhất. Tất nhiên bạn có thể tham gia các bảng TRƯỚC KHI chọn - nhưng tại sao bạn sẽ xây dựng một bảng tạm thời 100.000 hàng, khi bạn muốn lấy một hàng từ mỗi hàng? Xem tại SQL động, tạo một thủ tục, xây dựng một chuỗi truy vấn và sử dụng lại thủ tục đó. – dognose