SQL 根据一个或多个条件查询以获取信息。获取组合而不是确切数字

SQL Query to fetch information based on one or more condition. Getting combinations instead of exact number

我有两个 table。 Table 1 有大约 750,000 行,table 2 有 400 万行。 Table two 有一个我感兴趣的额外 ID 字段,所以我想编写一个查询来检查 table 2 中是否存在 750,000 table 1 条记录。对于所有这些行在 table 1 中存在于 table 2 中,我想要基于相同 SSN 的相应 ID。我尝试了以下查询:

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

我得到的不是 750,000 行的输出,而是 540 万条记录。我哪里错了? 请帮忙?

试试 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

如果 b.UID 是第二列中的唯一字段,则您正在请求 select 中的所有行。

此外,如果 SSN 在 table 中不是唯一的,您可以获得比 table 2.

的总行数更高的行数

你需要再考虑一下你想从table 2中得到什么。

编辑

当 ssn 在 table 2 中找到时,您可以尝试 return ssn 和 uid 的不同组合,前提是 ssn 和 uid 的基数为 1:1,即,每个唯一的 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

由于订单详细信息 table 与订单 table 处于一对多关系,这是任何连接的预期结果。如果您想要不同的东西,您需要为我们定义业务规则,该规则将告诉我们如何 select 仅来自订单详细信息 table 的一条记录。如果不了解您要实现的业务规则,您就无法有效地编写 SQL 代码。你永远不应该随意 select 众多记录中的一条,你需要了解你想要哪一条。