基于一个或多个条件获取信息的SQL查询。获取组合而不是精确的数字

基于一个或多个条件获取信息的SQL查询。获取组合而不是精确的数字,sql,sql-server,select,where,Sql,Sql Server,Select,Where,我有两张桌子。表1大约有750000行,表2有400万行。表2有一个我感兴趣的额外ID字段,因此我想编写一个查询,检查表2中是否存在750000条表1记录。对于表1中存在于表2中的所有行,我需要基于相同SSN的相应ID。我尝试了以下查询: SELECT distinct b.UID, a.* FROM [Analysis].[dbo].[Table1] A, [Proteus_8_2].dbo.Table2 B where a.ssn = b.ssn 我得到的不是75万行的输出,而是

我有两张桌子。表1大约有750000行,表2有400万行。表2有一个我感兴趣的额外ID字段,因此我想编写一个查询,检查表2中是否存在750000条表1记录。对于表1中存在于表2中的所有行,我需要基于相同SSN的相应ID。我尝试了以下查询:

SELECT distinct b.UID, a.* 
  FROM [Analysis].[dbo].[Table1] A, [Proteus_8_2].dbo.Table2 B
  where a.ssn = b.ssn
我得到的不是75万行的输出,而是540万条记录。我哪里做错了?
请帮忙

尝试使用
左连接

SELECT distinct b.UID, a.* 
  FROM [Analysis].[dbo].[Table1] A LEFT JOIN [Proteus_8_2].dbo.Table2 B
  on a.ssn = b.ssn

尝试使用
LEFT JOIN

SELECT distinct b.UID, a.* 
  FROM [Analysis].[dbo].[Table1] A LEFT JOIN [Proteus_8_2].dbo.Table2 B
  on a.ssn = b.ssn

您正在请求select if b.UID中的所有行是第二列中唯一的字段

此外,如果SSN在表1中不是唯一的,则可以获得比表2的总行数更高的行数

您需要再次考虑表2中的内容。

编辑

如果ssn和uid的基数为1:1,即每个唯一的ssn都有一个唯一的uid,那么当在表2中找到ssn时,您可以尝试返回ssn和uid的不同组合

select distinct
    a.ssn,b.[UID]
from [Analysis].[dbo].[Table1] a
cross apply
    ( select top 1 [uid] from [Proteus_8_2].[dbo].[Table2] where ssn = a.ssn ) b
where b.[UID] is not null

您正在请求select if b.UID中的所有行是第二列中唯一的字段

此外,如果SSN在表1中不是唯一的,则可以获得比表2的总行数更高的行数

您需要再次考虑表2中的内容。

编辑

如果ssn和uid的基数为1:1,即每个唯一的ssn都有一个唯一的uid,那么当在表2中找到ssn时,您可以尝试返回ssn和uid的不同组合

select distinct
    a.ssn,b.[UID]
from [Analysis].[dbo].[Table1] a
cross apply
    ( select top 1 [uid] from [Proteus_8_2].[dbo].[Table2] where ssn = a.ssn ) b
where b.[UID] is not null

由于order detail表与order表处于一对多关系中,因此这是任何联接的预期结果。如果您想要一些不同的东西,您需要为我们定义业务规则,该规则将告诉我们如何从订单明细表中仅选择一条记录。如果不了解您要实现的业务规则,就无法有效地编写SQL代码。决不能随意从众多记录中选择一条记录,你需要了解你想要哪一条记录。

由于订单明细表与订单表之间存在一对多关系,这是任何联接的预期结果。如果您想要一些不同的东西,您需要为我们定义业务规则,该规则将告诉我们如何从订单明细表中仅选择一条记录。如果不了解您要实现的业务规则,就无法有效地编写SQL代码。决不能随意从众多记录中选择一条记录,你需要知道你想要哪一条记录。

SSN在表2中能出现多次吗?如果是,两个SSN的UID是否相同?SSN是否为表1中的主SSN?在表2中,ssn可以有两个UID吗?ssn不是主要的,是的,ssn可以在表2中显示任意次数。是的,相同SSN的UID将相同。首先停止使用隐式联接。它们在20多年前被更好的显式联接所取代。隐式连接是SQL Server反模式,继续使用它们是不可原谅的。@HLGEM-我是SQL新手,不知道你在说什么。你能试着用一个示例查询来解释一下吗?SSN能在表2中出现不止一次吗?如果是,两个SSN的UID是否相同?SSN是否为表1中的主SSN?在表2中,ssn可以有两个UID吗?ssn不是主要的,是的,ssn可以在表2中显示任意次数。是的,相同SSN的UID将相同。首先停止使用隐式联接。它们在20多年前被更好的显式联接所取代。隐式连接是SQL Server反模式,继续使用它们是不可原谅的。@HLGEM-我是SQL新手,不知道你在说什么。你能试着用一个示例查询来解释一下吗?我只想查一下表2,看看表1中的750000条记录是否存在。无论找到哪个,都必须提供相同的UID。UID仅存在于表2中。您是否可以确认一种情况,当表2中的SSN存在于5个不同的行(例如SSN875)中时,表2中的UID对于这5行中的每一行都是相同的还是会发生变化?我只想查看表2,看看表1中的750000条记录是否存在。无论找到哪个,都必须提供相同的UID。UID仅出现在表2中。您是否确认一种情况,当表2中的SSN存在于5个不同的行(例如SSN875)中时,表2中的UID对于这5行中的每一行都是相同的,还是会发生变化?