#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)