MySQL - выбрать строки, в которых число в объединенной таблице равно 1

0

Мне нужно выбрать строки из таблицы "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). Есть идеи?

Теги:
select
count

2 ответа

1
Лучший ответ

Я думаю, вам просто нужна 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;
  • 0
    Почему так сложно? Вы можете просто присоединиться и ограничить результирующий набор having count(*) = 1
  • 0
    @Psi. , , (1) Потому что это не сложно. (2) Это работает, даже когда web_users имеет дубликаты.
Показать ещё 1 комментарий
0
SELECT id, code 
FROM web_users_branches as t1
JOIN  web_users as t2
ON t2.code = t1.client_code
HAVING COUNT(*) = 1

должно сработать. После внутреннего соединения вы получаете только одну строку, когда обе таблицы (!) Имеют ровно одну запись в начале.

  • 0
    Хотя этот ответ обычно не работает (потому что он терпит неудачу, когда web_users имеет дубликаты), он определенно не заслуживает web_users .
  • 0
    Сбой, если web_users имеет дубликаты, это правда, но этот сценарий не был приведен в вопросе. Моей целью было избежать подвыбора.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню