выберите все идентификаторы с флагом x1, но не x2 в одном столбце

#mysql

Вопрос:

Из таблицы, которая имеет 2 столбца ID и флаг

 ID  Flag
111  2
222  2
333  2
444  2
333  5
111  5
 

Я хочу выбрать все идентификаторы, у которых есть 2 флага, но не 5

ожидаемый ответ

 222
444
 

Я попробовал ниже, но это не сработает.

 SELECT * from table
where flag in ('2')
and flag not in ('5')
 

Комментарии:

1. Зачем создавать сложный SQL, когда простая инструкция SQL справится с этой задачей? Вы не упомянули тип данных атрибута flag . Предполагается, что это не число, поэтому, пожалуйста, попробуйте SELECT * from table WHERE flag = '2'; . Если flag это числовой тип данных, то пропустите ' ='2' ввод .

2. @Raky, который вернет 111 и 333, которые я не хочу включать в вывод.

3. Нет, в нем будут перечислены все идентификаторы и флаг, где флаг равен 2. Таким образом, результат будет 111 222 333 444 . Последние две записи будут опущены в результате. Попробуй это. Ваша цель не ясна? Вы просили перечислить все записи с флагом атрибута, имеющим значение 2, но вы не хотите указывать определенный идентификатор атрибута со значением флага 2.

4. Я попробовал ниже, но это, конечно, не сработает. Оба условия в ГДЕ проверяются в одной строке. И еще одна строка, на которую это не повлияло.

Ответ №1:

 SELECT id
FROM source
GROUP BY id
HAVING SUM(flag=2)
   AND !SUM(flag=5)