Левое соединение MySQL показывает повторяющиеся строки

У меня есть две таблицы MySQL - 1) пользователи и 2) StorageMapping.

пользователи

id, имя

склад

id, userId, inventoryId

Из приведенного выше вы можете видеть, что таблица «StorageMapping» - это таблица сопоставления, которая покажет, какие идентификаторы хранилища связаны с конкретным пользователем. Для пользователя будет несколько идентификаторов хранилища.

SELECT * FROM `users`
LEFT JOIN warehouseMapping
    ON warehouseMapping.userId = users.id
WHERE 1 AND warehouseMapping.warehouseId IN (1, 2)

Я намерен показать пользователей, у которых есть складские идентификаторы 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

Пожалуйста, поделитесь некоторыми входными данными и ожидаемым результатом, а также желаете получить фактический результат.

Chetan Ranpariya 16.05.2018 10:15

@ChetanRanpariya - вопрос обновлен. Пожалуйста, проверьте то же самое.

Niladri Banerjee - Uttarpara 16.05.2018 10:22
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
2
29
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы хотите найти пользователей, у которых есть оба хранилища, вот один способ:

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;

Другие вопросы по теме