我正在尝试计算每次'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数据字典寻找其他方法但却找不到任何东西
答案 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;