Oracle Query - 使用第一个表中的列数据选择记录

时间:2014-02-04 15:05:49

标签: sql oracle

使用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)

记录1:列:table2name ='Table2a'

记录2:列:table2name ='Table2b'

记录3:列:table2name ='Table2c'

附加表(table2x)

--- 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中的实际表名。

1 个答案:

答案 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

Here is a sqlfiddle demo