我有如下要求:
如果满足表3中的条件1 从表 1 中选择列
如果满足表3中的条件2 从表 2 中选择列
如果条件1和条件2都满足, 然后首先检查表1中的值, 如果该值为 null,则检查表 2 中的值
使用
UNION ALL
从 table1
和 table2
获取行,并将它们分配给适当的 priority
。然后,您可以使用 EXISTS
检查与 table3
和 DENSE_RANK
(或 ROW_NUMBER
)分析函数匹配的条件,以查找每组中最高优先级的行:
SELECT *
FROM (
SELECT t.*,
DENSE_RANK() OVER (PARTITION BY id ORDER BY priority) AS rnk
FROM (
SELECT t1.*, 1 AS priority FROM table1 t1
UNION ALL
SELECT t2.*, 2 FROM table2 t2
) t
WHERE EXISTS(
SELECT 1
FROM Table3 t3
WHERE t.id = t3.id
)
)
WHERE rnk = 1;