mysql - MySQL左连接显示重复行
问题描述
我有两个 MySQL 表 - 1)用户和 2)warehouseMapping。
用户
身份证,姓名
仓库映射
id, 用户 ID, 仓库 ID
从上面您可以看到“warehouseMapping”表是映射表,它将显示哪些warehouseIds 与特定用户相关。一个用户将有多个warehouseId。
SELECT * FROM `users`
LEFT JOIN warehouseMapping
ON warehouseMapping.userId = users.id
WHERE 1 AND warehouseMapping.warehouseId IN (1, 2)
我的目的是显示仓库 id 为 1 和 2 的用户。
提交相同的内容后,MySQL 两次向我显示相同的用户名。
用户表的输入:
id name
***************************
1 Niladri
2 Tanay
仓库映射表的输入:
id userId warehouseId
*****************************
1 1 1
2 1 2
3 1 3
4 2 1
5 2 2
解决方案
如果要查找同时拥有两个仓库的用户,这里有一种方法:
SELECT u.id, u.name
FROM users u
LEFT JOIN warehouseMapping w
ON w.userId = u.id
WHERE w.warehouseId IN (1, 2)
GROUP BY u.id
HAVING COUNT(DISTINCT w.warehouseId) = 2;
推荐阅读
- swift - Xcode 12 beta 3 不打印调试信息
- rest - 什么是实现允许过滤潜在数百个资源 ID 的 GET 请求的 RESTful 方式?
- javascript - 猫鼬填充在填充对象上返回空数组
- c++ - 读取 Windows UDP 缓冲区大小
- python - 如何在某些服务器上禁用命令 discord py
- f# - 在 F# 中解析中间有孔的列表的最惯用方法
- xml - 有没有办法使用 xmllint 在 XML 树上追溯?
- android - 如何访问(读/写)sd 卡公共目录?Environment.getExternalStoragePublicDirectory 返回内部存储
- javascript - JavaScript:如何按嵌套在对象 2 级深处的值过滤数组
- jquery - 使用正则表达式查找和替换 html 标签