ORACLE:查找具有两列(名称如 ID、NUM)的表的 SQL 语法

2024-01-04

我的问题基于:查找具有两个列名的表 https://stackoverflow.com/questions/6658696/oracle-sql-how-to-find-out-which-table-has-the-following-two-columns如果有兴趣,请阅读上面的内容,因为它涵盖了很多内容,我不会在这里重复。

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

注意,您可以将 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 的列。

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

另外,在出现几个答案后,作为“额外的功劳”,我重新做了艾哈迈德的答案以在 Toad 中使用变量,所以我也为 Toad 添加了一个标签。


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

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 ;

See a demo https://dbfiddle.uk/2zOZZ3sk.

如果要选择包含两个列名的表,one像身份证和one与 NUM 一样,您可以在having 子句中将 >=1 替换为 =1。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ORACLE:查找具有两列(名称如 ID、NUM)的表的 SQL 语法 的相关文章

随机推荐