Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL Server中创建新列并在新列中仅查找匹配数据是否有效?_Sql_Sql Server - Fatal编程技术网

在SQL Server中创建新列并在新列中仅查找匹配数据是否有效?

在SQL Server中创建新列并在新列中仅查找匹配数据是否有效?,sql,sql-server,Sql,Sql Server,我想知道以下流程是否有效,或者是否有更好的方法: 表由4个相关列组成: 身份证件 出生日期1984-03-19 名字叫约翰 姓Doe 我想连接这些列以创建“1984-03-19 John Doe”作为新列。然后我想获取一个值列表,有一个.csv文件,其中包含DOB,First,Last name,这种格式,并且只有在存在匹配项时才从表中提取Id 这个表有数百万行,所以我想知道是否有更有效的方法来编写这个查询 这是用于临时请求。您应该将CSV文件加载到表中。让我们称之为CSV 我们将把您的原始表格

我想知道以下流程是否有效,或者是否有更好的方法:

表由4个相关列组成:

身份证件 出生日期1984-03-19 名字叫约翰 姓Doe 我想连接这些列以创建“1984-03-19 John Doe”作为新列。然后我想获取一个值列表,有一个.csv文件,其中包含DOB,First,Last name,这种格式,并且只有在存在匹配项时才从表中提取Id

这个表有数百万行,所以我想知道是否有更有效的方法来编写这个查询


这是用于临时请求。

您应该将CSV文件加载到表中。让我们称之为CSV

我们将把您的原始表格称为t

然后您需要一个简单的连接:

瞧!完成。没有连接


为了提高性能,您需要在tfirstname、lastname、dob上建立索引,并按任意顺序排列列。

为什么要这样做?我很遗憾John是在同一天出生的。@Larnu-我有一个包含大约1k个值的列表,采用这种串联格式。我试图从表中找到它们的Id值。comapre的唯一字段是Dob、First和Last Name。如果要搜索表,请传递每列的值:其中Firstname='John'和LastName='Doe'和Dob='19870319'执行类似于WHERE Firstname+LastName+Dob=。。。将给出一个转换错误,如果您转换DoB,由于转换和连接,它将不是一个可搜索查询*。如果查询速度慢,很可能是由于索引不好或缺少索引,您是说您已经有了一个不同的表,其中“DOB First Last”是您要比较的字段吗?如果是这样的话,你可以做你描述的事情,或者我更喜欢相反的方式——将另一个字段拆分为DOB,first,last,然后执行DOB=DOB,first=first,last=last。非常感谢。从性能的角度来看,我需要了解更多关于这些值的内容,而不是创建一个新的键进行搜索,以及tfirstname、lastname、dob上的索引。
select t.id
from csv join
     t
     on t.firstname = csv.firstname and
        t.lastname = csv.lastname and
        t.dob = csv.dob;