Mysql несколько условий с одного столбца

Всем привет заметил такой странный глюк в MYSQL что условие And не работает с одной страницы. Имеется для примера простая таблица где указано посещение посетителей той или иной комнаты в барделе(шутка).

логи клиентов

Необходимо найти клиентов которые были в 1 и в 2 комнате. Я делаю очевидный запрос

SELECT * FROM `test` WHERE room =1 and room =2

и получаю фигу. Причем в документации такие случае нигде не показанны, кроме как увидел у оракла что вроде как можно. Использую mysql 5.7 можете помочь советом?


Ответы (4 шт):

Автор решения: unknown

оператор AND в данном случае будет искать выполнение обоих условий в каждой строке, т.е. он ожидает, что одна строка будет иметь как значение комнаты 1, так и 2, что невозможно. если вы хотите вывести клиентов, которые были либо там, либо там, то воспользуйтесь оператором OR. если вас интересуют клиенты, которые посетили обе комнаты, вариантов решения несколько, например, обратиться к таблице 2 раза, выбирая разные номера комнат при разных обращениях, и соединить их при помощи иннер джоин по полю клиента

→ Ссылка
Автор решения: В'ячеслав Головач

Комнаты в барделе(шутка) - вынести в отдельную таблицу.

Вот придумал костыль -

select name, sum(room) from Test where room in (1,2) group by name having 
sum(room) = 3;

НО

если Иван два раза сходит к одной и тойже во 2 или 1. Уже не будет работать. Нужно выбрать както уникальные 1 и 2 и потом их просумировать. Подзапросом, возможно. Тогда норм.

Подумаю на досуге.

→ Ссылка
Автор решения: user3209882

Поставить OR вместо and и запрос будет правильно работать:

SELECT * FROM `test` WHERE room = 1 OR room = 2;
→ Ссылка
Автор решения: Allito
create database test1;

use test1;

create table test (room int, user_id int);

insert into test
    values
    (1, 1), 
    (2, 2),
    (3, 3),
    (1, 4),
    (2, 1),
    (2, 3),
    (1, 3);

select distinct t1.user_id from test t1
    join (select * from test) as t2 on t1.user_id = t2.user_id
    where t1.room <> t2.room;

результат: 1,3

→ Ссылка