使用Oracle,我需要查询表。有一个主表有一个字段,其中包含所有其他表的名称。 (每行一个)
第一个表(table1)有一个表,其名称为第二个表(table1.table2name)。
第二个表有一个日期字段(datetocheck)。如果在第二个表中没有超过6个月的记录(table2有日期,table1有我要显示的数据),我想从第一个表中仅带回记录。
这将是这种格式的东西:
select * from table1
where not exists (
select * from table1.table2name
where datetocheck > add_months(sysdate, -6)
)
先谢谢
其他信息
有一个table1和MANY table2。
例如
记录1:列:table2name ='Table2a'
记录2:列:table2name ='Table2b'
记录3:列:table2name ='Table2c'
--- Table2a
记录1:列:datetocheck = '01 / 01/1980'
记录2:列:datetocheck = '01 / 01/1990'
记录3:列:datetocheck = '01 / 01/2000'
--- Table2b
记录1:列:datetocheck = '01 / 01/1982'
记录2:列:datetocheck = '01 / 01/1983'..等等
--- Table2c
记录1:列:datetocheck = '01 / 01/2014'
记录2:列:datetocheck = '02 / 01/2014'..等等
注意#1 :table1和table2x之间的唯一关系是table1中的table2name列和table2x中的实际表名。
答案 0 :(得分:1)
您可以使用DBMS_XMLGEN
在查询中创建动态sqls:
select *
from table1 as t1
where dbms_xmlgen.getxmltype('select * from ' ||
t1.table2name ||
' where datetocheck > add_months(sysdate, -6)
').extract('//text()').getstringval() is not null