在为一个表提供层次结构的同时从2个表中进行查询的正确方法。

时间:2015-08-07 09:49:25

标签: sql oracle

我目前正在尝试从两个具有相同列的表中获取数据。两个表的主键“ID”的值可以存在于一个或两个表中。即使使用相同的主键,两个表中不同列中的值也可能不同。我的问题是我有一个ID testID,如何在我第一次检查table1时查询它是否存在。如果它存在于table1中,我使用table1中的详细信息,否则检查table2并使用table2中的详细信息(如果table2中存在)。

2 个答案:

答案 0 :(得分:1)

可能的方法是使用FULL OUTER JOIN

IndexError

如果T1.ID / T2.ID不为NULL,则如果在相应的源表中定义了记录,则获取信息。

答案 1 :(得分:1)

使用FULL OUTER JOIN:

select 
  case when t1.id is not null then t1.field1 else t2.field1 end as field1, 
  case when t1.id is not null then t1.field2 else t2.field2 end as field2, 
  ...
from table1 t1
full outer join table2 t2 on t2.id = t1.id
where t1.id = :testid or t2.id = :testid;

或UNION ALL与NOT EXISTS结合使用:

select field1, field2, ...
from table1
where id = :testid
union all
select field1, field2, ...
from table2
where id = :testid and not exists (select * from table1 where id = :testid);