子查询的问题,试图从所有表中进行计数

时间:2014-07-23 10:15:07

标签: sql oracle subquery

我正在尝试计算每次'txn_id'出现在我的db中的表中

例如,在其中一个表中:

SELECT COUNT('txn_id') FROM xr_txn_deal_party;

所以在不同的表中有很多'txn_id'实例

我想用子查询来查询数据库中的所有表,所以我试过了:

SELECT COUNT ('txn_id') from all_tab_columns where ('txn_id') in
(SELECT distinct table_name FROM all_tables where OWNER='RGSWKF_PRGM');

但它带回0

我的查询错在哪里?

我试过通过oracle数据字典寻找其他方法但却找不到任何东西

2 个答案:

答案 0 :(得分:1)

您的第一个查询应该如下(没有引号):

SELECT COUNT(txn_id) FROM xr_txn_deal_party;

很难说你的第二个查询在做什么。我猜你想要计算列txn_id和所有者'RGSWKF_PRGM'的表的数量。

SELECT COUNT(*)
from all_tab_columns tc join
     all_tables t
     on tc.table_name = t.name_name
where lower(tc.column_name) = 'txn_id and t.owner = 'RGSWKF_PRGM');

答案 1 :(得分:0)

删除单引号。当您使用单引号时,它将txn_id视为字符串值而不是变量名。当您使用单引号时,您的查询将评估为获取具有tablename =' txn_id'的表,因为您没有名为table的表' txn_id',您的查询返回0.

 SELECT COUNT (txn_id) from all_tab_columns where (txn_id) in
(SELECT distinct table_name FROM all_tables where OWNER='RGSWKF_PRGM');

关于查询的计数部分,如果使用单引号,则以下查询的所有3列都返回相同的值。

SELECT COUNT('txn_id'), count('abc') , count('xyz') FROM xr_txn_deal_party;