Oracle - 根据表3中的某些条件从表1或表2中选择数据

问题描述 投票:0回答:1

我有如下要求:

如果满足表3中的条件1 从表 1 中选择列

如果满足表3中的条件2 从表 2 中选择列

如果条件1和条件2都满足, 然后首先检查表1中的值, 如果该值为 null,则检查表 2 中的值

oracle oracle-sqldeveloper oracle19c
1个回答
0
投票

使用

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;
© www.soinside.com 2019 - 2024. All rights reserved.