





Ваш текущий запрос выбирает user_id, где исключение равно 3 и 4, что никогда не может быть правдой, поскольку одна ячейка содержит только одно значение.
Чтобы выбрать user_id, у которых есть строки 3 и 4, вам нужно выполнить запрос, где исключение составляет 3 или 4, и GROUP BYuser_id. Затем вы можете использовать агрегатную функцию COUNT(), чтобы найти, где есть две строки — это будут строки, в которых исключение составляет 3 и 4.
Это предполагает, что существует уникальная связь между user_id и exception, а это означает, что комбинация user_id и exception никогда не встречается дважды.
SELECT user_id
FROM table
WHERE exception IN (3, 4)
GROUP BY user_id
HAVING COUNT(user_id) = 2
спасибо за ответ... я хочу выбрать только идентификаторы пользователей, у которых есть оба исключения, а не одно из двух
Кажется, я неправильно понял ваш вопрос. Если это так, вам нужно GROUP BY и посмотреть, где COUNT() равно двум. Я отредактирую свой ответ.
Используйте агрегацию и having:
SELECT user_id
FROM table
WHERE exception in (3, 4)
GROUP BY user_id
HAVING COUNT(DISTINCT exception) = 2;
Это возвращает пользователей, у которых есть оба исключения. Если нет дубликатов для пользователей/исключений, используйте HAVING COUNT(*) = 2.
использование существует
select t1.* from table_name t1
where exists ( select 1 from table_name t2 where t1.user_id=t2.user_id
where exception in (3,4)
having count(distinct exception)=2)
Приведенный ниже запрос даст вам пользователей, которые столкнулись с обоими исключениями 3 и 4, если это то, что вы ищете.
select user_id from table where exception=3
intersect
select user_id from table where exception=4
Или попробуйте
Выберите user_id из таблицы a, если исключение = 3 и существует (выберите user_id из таблицы b, где исключение = 4 и a.user_id = b.user_id)
Это очень хороший подход. Однако, к сожалению, в MySQL нет INTERSECT.
Я дам вам одно предложение
Создайте два столбца (поля) в таблице базы данных с именами исключение_1 и исключение_2. Теперь ваша таблица выглядит так, как показано ниже,
user_id exception_1 exception_2
2 3 4
2 4 3
3 3 4
а затем выполните приведенный ниже запрос.
SELECT user_id FROM table WHERE exception_1 = 3 AND exception_2 = 4
Ответ Qirel неверен, потому что они неправильно поняли требование. maximus26 хочет, чтобы идентификаторы пользователей имели исключение 3 А ТАКЖЕ 4, то есть оба. И ваше предложение состоит в том, чтобы добавить столбец в таблицу, чтобы избыточно хранить значения? Это ужасная идея.
Нет, нет возможности получить данные user_id с помощью оператора AND из одного столбца. Он (maximus26) пишет запрос, в котором исключение равно 3 и 4, что никогда не может быть правдой, поскольку значение одной ячейки не может быть 3 И 4 одновременно. В противном случае ему нужно создать два столбца в качестве моего ответа.
Нет. Посмотрите на ответ Гордона. Вот как получить идентификаторы с исключениями 3 и 4. Qirel обновил свой ответ, чтобы он соответствовал ответу Гордона. forpas добавил ответ, который делает то же самое, только немного отличается. zulfi123786 демонстрирует еще один хороший подход, который не работает только в MySQL. rad добавил еще одно решение. Все эти решения работают. Нет необходимости менять модель данных. Ваше предложение просто очень, очень плохое. Это правильно, что вы не можете использовать оператор AND, как пытался maximus26, но вы все равно можете получить идентификаторы пользователей, которые имеют как исключение 3, так и 4.
С group by и min и max:
select user_id
from tablename
where exception in (3, 4)
group by user_id
having min(exception) = 3 and max(exception) = 4;
Вам нужен self join:
select u1.user_id from
tbl_user u1 join tbl_user u2
on u1.user_id = u2.user_id
where u1.exception = 3 and u2.exception = 4
С английским языком беда. «И» иногда означает «Или». В математике и компьютерах есть четкая разница. Вам нужно
ORв этой ситуации. Но, так как нет оператора «Оба». Отсюда и решенияHAVING COUNT...ниже.