我的问题是基于以下几点: Finding table with two column names个 如果感兴趣,请阅读上面的内容,因为它涵盖了很多方面,我在这里不再重复.

对于给出的答案,我 comments 如下:

请注意,您可以将IN替换为=和OR子句,但将其泛化为LIKE可能不起作用,因为LIKE可能会在每个术语中获得超过1个计数:例如

SELECT OWNER, TABLE_NAME, count(DISTINCT COLUMN_NAME) as ourCount 
FROM all_tab_cols WHERE ( (column_name LIKE '%ID%') OR (COLUMN_NAME LIKE '%NUM%') ) 
GROUP BY OWNER, TABLE_NAME 
HAVING COUNT(DISTINCT column_name) >= 2 
ORDER BY OWNER, TABLE_NAME ; 

这段代码编译并运行.但是,它不能保证表既有名称包含ID的列,也有名称包含NUM的列,因为可能有两列或更多列的名称类似于ID.

有没有办法将上面链接中给出的答案推广到LIKE命令. 目标:查找包含两个列名的表,一个类似ID(或某个字符串),另一个类似NUM(或其他字符串).

推荐答案

您可以使用条件聚合,如下所示:

SELECT OWNER, TABLE_NAME, COUNT(CASE WHEN COLUMN_NAME LIKE '%ID%' THEN COLUMN_NAME END) as ID_COUNT,
  COUNT(CASE WHEN COLUMN_NAME LIKE '%NUM%' THEN COLUMN_NAME END) NUM_COUNT
FROM all_tab_cols
GROUP BY OWNER, TABLE_NAME 
HAVING COUNT(CASE WHEN COLUMN_NAME LIKE '%ID%' THEN COLUMN_NAME END)>=1 AND
       COUNT(CASE WHEN COLUMN_NAME LIKE '%NUM%' THEN COLUMN_NAME END)>=1
ORDER BY OWNER, TABLE_NAME ;

请看demo.

如果要 Select 包含两个列名的表,one像ID和one像NUM,您可以将HAVING子句中的>;=1替换为=1.

Sql相关问答推荐

提取Snowflake SQL中的嵌套键

使用group by后我的平均输出不是我想要的

如何在T—SQL中找到值更改之前的日期?

如何在case语句中使用条件来计算成对变量

为什么postgres中CURRENT_TIMESTAMP的日期与CURRENT_DATE不同?

LAG函数通过丢弃空值返回前一行

基于多个字段删除Access中的重复记录,同时保留最低优先级

如何优化我的功能以减少花费的时间?

防止ActiveRecord迁移在db/structure.sql中进行巨大更改

缺少日期标识

SQL递归.硬币兑换问题.-try 使用递归解决硬币找零问题

SQL将三个表中的三列组合为一列

通过UPDATE SELECT更新表时出现问题

获取分布在同一行的列中的出现次数

Postgresql - 如何根据阈值计算累积和

SQL 中的第一个值和倒数第二个值

一次 Select 语句中按组累计的SQL累计数

雅典娜弄错了操作顺序

从每行中排除最大元素

SQL 计数和过滤查询优化