繁体   English   中英

从两个表中获取相似的列名和计数

[英]Getting the similar column names and count from two tables

我的数据库中有多个表(千个),我想检查一下是否有两个给定的表具有相似的列名。 为此,我创建了3个示例表,如下所示:

    table1(song_cast, song_name, song_size)
    table2(song_size, singer, movie_name, song_cast)
    table3(movie_name, singer, song_name, song_cast)

我期望的输出是

    |table1 & table2 | song_cast, song_size | 2 #count of common columns
    |table2 & table3 | singer, song_cast, movie_name | 3
    |table1 & table3 | song_name, song_cast | 2

我将在java(NetBeans IDE 8.2)中运行此代码,因此将在NetBeans中获得此输出。

使用几个常见的表格表达式,select ... for xml path ('') stuff()select ... for xml path ('')字符串连接的select ... for xml path ('')方法

;with cte as (
select c.*
from information_schema.tables t
  inner join information_schema.columns c
    on t.table_schema = c.table_schema
   and t.table_name = c.table_name
where t.table_type='base table'
)
, match as (
select 
    tables = l.table_name + ' & ' + r.table_name
  , l.column_name
from cte l
  inner join cte r
    on l.column_name = r.column_name
   and l.table_name < r.table_name
)
select 
    tables
  , columns = stuff((
  select ', '+ column_name
  from match i
  where m.tables = i.tables
  for xml path (''), type).value('(./text())[1]','nvarchar(max)')
  ,1,2,'')
  , matches = count(*)
from match m
group by tables

extrester演示: http ://rextester.com/TLQ28814

收益:

+-----------------+-------------------------------+---------+
|     tables      |            columns            | matches |
+-----------------+-------------------------------+---------+
| table1 & table2 | song_cast, song_size          |       2 |
| table1 & table3 | song_cast, song_name          |       2 |
| table2 & table3 | singer, movie_name, song_cast |       3 |
+-----------------+-------------------------------+---------+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM