sql - 我如何将 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
解决方案
在 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
如果需要特定行(例如最旧或最新),可以在子查询中使用。
推荐阅读
- node.js - 在 spatie/browsershot 中生成 pdf 不起作用
- java - Java属性文件或某个类中的公共静态变量或两者兼而有之?
- hibernate - 在休眠 5 中使用 org.hibernate.id.MultipleHiLoPerTableGenerator 序列获取重复的主键错误
- reactjs - React history.push location.state 未定义
- git - 带有 git-dir 的裸存储库上的上游'origin/master'无效
- vba - 在循环中输入公式时类型不匹配(错误 13)
- c# - Yarp.ReverseProxy 后面的 SignalR 导致超时导致服务器不响应
- python - 检查两个列表中的每一个是否包含 Python 中的两个元素中的每一个
- c - 什么定义了 C 中全局数组的最大大小?
- c# - NullReferenceException 尽管正确找到了游戏对象并且组件正确就位