Sql Oracle查询-使用第一个表中的列数据选择记录
使用Oracle,我有需要查询的表。有一个主表,其中有一个字段包含所有其他表的名称。(每行一个) 第一个表(table1)有一个列,该列的表名为第二个表(table1.table2name) 第二个表有一个日期字段(datetocheck)。如果第二个表中没有超过6个月的记录(表2有日期,表1有我要显示的数据),我只想从第一个表中带回记录 它将以这种形式出现:Sql Oracle查询-使用第一个表中的列数据选择记录,sql,oracle,Sql,Oracle,使用Oracle,我有需要查询的表。有一个主表,其中有一个字段包含所有其他表的名称。(每行一个) 第一个表(table1)有一个列,该列的表名为第二个表(table1.table2name) 第二个表有一个日期字段(datetocheck)。如果第二个表中没有超过6个月的记录(表2有日期,表1有我要显示的数据),我只想从第一个表中带回记录 它将以这种形式出现: select * from table1 where not exists ( select *
select * from table1
where not exists (
select * from table1.table2name
where datetocheck > add_months(sysdate, -6)
)
谢谢
其他信息
有一个表1和多个表2
比如说
主表(表1)
记录1:列:table2name='Table2a'
记录2:列:table2name='Table2b'
记录3:列:table2name='Table2c'
其他表格(表2X)
---表2A
记录1:列:datetocheck='1/01/1980'
记录2:列:datetocheck='01/01/1990'
记录3:列:datetocheck='01/01/2000'
---表2B
记录1:列:datetocheck='1/01/1982'
记录2:列:datetocheck='01/01/1983'…等
---表2C
记录1:列:datetocheck='1/01/2014'
记录2:列:datetocheck='2014年1月2日'…等
注意#1:table1和table2x之间的唯一关系是table1中的table2name列和table2x中的实际表名。您可以使用
DBMS\u XMLGEN
在查询中创建动态SQL:
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
好的,那么您尝试了什么?您不能在SQL语句中动态引用表名。你需要一个准备好的语句或光标。看这里:a.B.凯德,谢谢你,你肯定走对了方向。一个简单的问题,如果Table2位于table1的某个字段中,我将如何提取Table2名称?谢谢。我不明白你的问题,我编辑了我的答案,将表1的别名改为
t1
,这样你就可以看到我用t1提取了值。表2name
尝试了你的例子,效果非常好。哇,恭喜你,谢谢你。标记为答案。凯德,你知道有没有一种简单的方法来检查表2X是否存在吗?我收到一个错误,因为某些表位于table1行中,但该表(table2x)不存在。我有一个想法-将table1
与user\u表
连接,这样只会查询现有表,但不幸的是,您无法确定将首先计算where子句的哪一部分。。。不管怎么说,我找到了一种方法(我想),但这很难看。请看下面的图片