Мне нужно выбрать строки из таблицы "web_users", только если строки другой объединенной таблицы, называемой "web_users_branches", равны 1.
Что у меня есть сейчас:
SELECT id, code from web_users
JOIN
(
SELECT client_code
FROM web_users_branches
HAVING COUNT(*) = 1
) as t2
ON web_users.code = t2.client_code;
Я получаю пустой результат.
Пример базы данных:
Таблица веб-пользователей:
id code
1 0001
2 0002
3 0003
Веб-пользователи Филиалы:
id client_code
1 0001
2 0001
3 0002
4 0003
5 0003
Теперь после этого запроса я должен получить только пользователя, который client_code равен 0002, потому что все остальные кол-во клиента user_code не равны 1 (есть x2 0003 и x2 0001). Есть идеи?
Я думаю, вам просто нужна group by
в подзапросе:
SELECT u.id, u.code
FROM web_users u JOIN
(SELECT client_code
FROM web_users_branches
GROUP BY client_code
HAVING COUNT(*) = 1
) c
ON u.code = c.client_code;
SELECT id, code
FROM web_users_branches as t1
JOIN web_users as t2
ON t2.code = t1.client_code
HAVING COUNT(*) = 1
должно сработать. После внутреннего соединения вы получаете только одну строку, когда обе таблицы (!) Имеют ровно одну запись в начале.
web_users
имеет дубликаты), он определенно не заслуживает web_users
.
having count(*) = 1
web_users
имеет дубликаты.