LINUX.ORG.RU

Помогите с запросом

 , , ,


0

1

Привет, ЛОР!

Помогите с запросом. Есть записи в таблице вида:

some_id | some_flag
--------------------
10      | 0
10      | 1
11      | 0
11      | 0
12      | 0
12      | 0
13      | 1
13      | 0

Как можно выбрать ТОЛЬКО те some_id для которых нет ни одного some_flag = 1? В данном случае, это только 11 и 12. Вроде бы простая задача, а сообразить не получается(.



Последнее исправление: djnoob (всего исправлений: 1)

SELECT some_id
FROM t
GROUP BY some_id
HAVING BIT_OR(CASE some_flag WHEN 1 THEN 1 ELSE 2) = 2
Sorcerer ★★★★★
()
Последнее исправление: Sorcerer (всего исправлений: 1)
Ответ на: комментарий от anonymous

ну так понял если флаг в одной записи не вытаскивать все с данным ид

ilovewindows ★★★★★
()

Гоу на скуль ру. Там тебя «наширявшиеся негры горелкой» лол
Ну а для хохмы еще вариант без подзапроса select case when max(f) over(partition by id) = 0 then id end from t;

mos ★★☆☆☆
()
Последнее исправление: mos (всего исправлений: 1)
Ответ на: комментарий от ilovewindows

ну еще distinct можно воткнуть в (select distinct some_id from t where some_flag=1)

ilovewindows ★★★★★
()
Ответ на: комментарий от anonymous

а что «where some_flag != 1» не работает?

Тихо, не спугни: такое колоритное сбрище ламерья в треде ещё поискать.

anonymous
()
Ответ на: комментарий от anonymous

Это не соответствует условию задачи, если есть хотя бы одна запись с some_id=N и some_flag=1 тогда все записи с some_id=N исключаются из выборки.

По теме вариант с подзапросом скорее всего будет наиболее быстрым на больших выборках при наличии соответствующих индексов, но это надо проверять.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.