首页 > 解决方案 > 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

标签: mysql

解决方案


如果要查找同时拥有两个仓库的用户,这里有一种方法:

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;

推荐阅读