首页 > 解决方案 > 我如何将 2 个表连接在一起,仅从第二个表中获取重复值中的一行值

问题描述

我有 2 张桌子,第 1 张桌子(撤回)和第 2 张桌子(手术)。撤回表中的一列称为“参考”,参考列有时具有重复值(它应该如此)。可操作的表列是id(与撤回表中的引用列完全相同)、名称和仓库。我需要保持第一个表的大小与它已经是完全相同的大小(在行号中),但从操作表中添加名称和仓库编号。

注意:在操作表中,对于每个单独的 ID 号,名称和仓库列将始终完全相同。

当我尝试 LEFT JOIN 时,我遇到的问题是查询多次重复所有行。我认为这是因为操作表在许多不同的行中包含相同的 id 值

SELECT * FROM withdrawn

LEFT JOIN operative ON id = reference

我希望查询返回

reference    depot     name
1            101       John Smith
1            101       John Smith
1            101       John Smith
2            102       Sam Turner
2            102       Sam Turner

我得到的是类似的东西

reference    depot     name
1            101       John Smith
1            101       John Smith
1            101       John Smith
1            101       John Smith
1            101       John Smith
1            101       John Smith
1            101       John Smith
1            101       John Smith
1            101       John Smith
2            102       Sam Turner
2            102       Sam Turner
2            102       Sam Turner
2            102       Sam Turner
2            102       Sam Turner
2            102       Sam Turner
2            102       Sam Turner
2            102       Sam Turner

标签: sqlsql-server

解决方案


在 SQL Server 中,您可以使用APPLY

SELECT w.*, o.depot
FROM withdrawn w OUTER APPLY
     (SELECT TOP (1) o.*
      FROM operative
      WHERE o.id = w.reference
     ) ;

这将返回任意匹配行。ORDER BY如果需要特定行(例如最旧或最新),可以在子查询中使用。


推荐阅读