我有两个相同列的表。例如,workInfo是一个表,oldworkinfo是另一个表。列可以是 - id,branch,product,Data。 (id是唯一的主键。)当事务完成时,它将从workinfo中删除并移至oldworkinfo。
我想首先编写一个查询来从workinfo进行最佳搜索,然后是oldworkinfo,因为我必须在其他表中执行一些连接操作。
即首先在workinfo表中搜索,如果记录可用则返回,否则在oldworkinfo中搜索并返回记录。以下是我使用union编写的示例查询,但这会在两个表中进行搜索。
with squery as
(select * from workinfo
UNION ALL
select * from oldworkinfo)
Select * from squery where squery.id=Key;
请在单个查询中建议这是可能的。我不能使用plsql选项作为整体连接和其他查询变得复杂。
答案 0 :(得分:0)
with sub as
(select * from workinfo wi where wi.id = mykey)
select * from sub
union all
select * from oldworkinfo owi where owi.id = mykey and not exists (select * from sub)
编辑:搜索两个表中的行需要union all
。通过在not exists
上向查询添加oldworkinfo
子句,确保仅在workinfo
中没有数据时才选择其数据。
然后,工作查询将为select * from workinfo where id=mykey union all select * from oldworkinfo where id=mykey and not exists (select * from workinfo where id=mykey)
。
出于性能和可读性的原因,我使用了with
子句,因此workinfo
上的查询只执行一次。
答案 1 :(得分:0)
据我了解,主要的想法是避免对包含历史数据的大桌子进行不必要的扫描。此查询可以帮助避免它:
select * from workinfo where id = Key
UNION ALL
select * from oldworkinfo where
not exists (
select null
from workinfo wi where wi.id = Key
)
and id = Key