微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Azure SQL Server 中根据名称查找多个列

如何解决在 Azure SQL Server 中根据名称查找多个列

问题:我有 100 个表,这些表的全名、出生日期、电子邮件和 ID 可以有不同的列名。例如:表 1 的全名是 Emp name、dob、work email 和 national id。表 2 可能有完整的 Nm、出生日期、Wrk 电子邮件、NID 和表 3 可能有全名、出生日期、工作 Em、NatID 等..对于 10 个或更多不同的表

全名 + dob 被视为唯一列

我需要的是查询自动方式来选择具有不同名称的那些可能的列,并根据具有这些列及其值(全名、出生日期、工作电子邮件、国家 ID)的参考表查找这些列值) 并且如果我找到了匹配项

期望结果:我需要检索找到匹配的表名、找到匹配的列名、匹配的值,如果没有找到匹配则返回“不匹配”

我尝试使用 informatION_SCHEMA.COLUMNS 但还没有成功。任何帮助将不胜感激

解决方法

如果它有 10 个表,那么大概您可以提前查看它们并知道要查看哪些列。然后面临的挑战是将所有这些组合成一个查询。你可以用一堆 UNION 来做,就像这样:

select [Emp name] as Name,[dob] as DateOfBirth,[work email] as Email,[national id] as ID,'Table1' as TableName
from Table1
UNION 
select [Full Nm] as Name,[date of birth] as DateOfBirth,[Wrk Email] as Email,[NID] as ID,'Table2' as TableName
from Table2
UNION
select [Full Name] as Name,[birth date] as DateOfBirth,[Work Em] as Email,[NatID] as ID,'Table3' as TableName
from Table3
UNION
--etc etc

注意我们如何添加一个 TableName 列来告诉我们每个项目来自哪个表。

要查询整个数据集,您需要将其声明为视图或类似的东西,或者像这样将其嵌套在另一个 SELECT 中:

select Name,DateOfBirth,Email,ID,TableName
from (
    select [Emp name] as Name,'Table1' as TableName
    from Table1
    UNION 
    select [Full Nm] as Name,'Table2' as TableName
    from Table2
    UNION
    select [Full Name] as Name,'Table3' as TableName
    from Table3
    UNION
    --etc etc
) giveitaname
WHERE [Name] = 'Joe Bloggs' and [DateOfBirth] = '01/Feb/1999'
,

我认为您可以查看 INFORMATION_SCHEMA.COLUMNS。除非我没有关注你,你肯定能做到吗?

select c.COLUMN_NAME,IsNull(m.Found,'No Match') Matches
from INFORMATION_SCHEMA.COLUMNS c
outer apply (
    select column_name + ' is in ' + table_name Found
    from INFORMATION_SCHEMA.COLUMNS x
    where x.COLUMN_NAME =c.COLUMN_NAME and x.TABLE_NAME !=c.TABLE_NAME
)m
where c.table_name='MasterList'

使用您想在其他表中定位的所有列变体创建您的 MasterList 表,然后这将列出数据库中具有匹配列的所有表。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。