Выберите отличное значение, когда count = 1 в SQL
У меня есть стол, который выглядит так
fID_a fID_b
1 1
1 2
2 2
3 1
я хочу все fID_a
где fID_b
1 и где fID_a
это одна запись в этой таблице.
У меня есть SQL-запрос, который выглядит так
select fID_a from tbl
where fID_b = 1
group by fID_a
having count(*) = 1
Но этот запрос по-прежнему включает в себя fID_a
1, хотя в этой таблице 2 записи!
5 ответов
Решение
Попробуй это
SELECT fID_a FROM tbl
GROUP BY fID_a
HAVING MAX(fID_b)=1
AND MIN(fID_b)=1
Если вы используете where
затем вы бы отфильтровать другие значения, что сделало бы count
неточный.
select fID_a
from tbl
group by fID_a
having count(*) = 1
and sum(case when fID_b = 1 then 1 else 0 end) = 1
Вы должны попробовать себя присоединиться, чтобы достичь этого:
SELECT t1.fID_a
FROM tbl t1
JOIN tbl t2
ON t1.fid_a = t2.fid_a
AND t1.fid_b = 1
GROUP BY t1.fID_a
HAVING COUNT(*) = 1
- Смотрите этот SQLFiddle
- Смотрите этот SQLFiddle с большим количеством значений:
select fID_a,fID_b
from tb1, (select fID_a
from tb1
group by fID_a
having count(*) = 1) temp
where tb1.fID_a = temp.fID_a
and fID_b = 1;
Это должно работать. Ваш запрос не работает, потому что mysql вычисляет предложение where перед предложением.
select fID_a from
(select fID_a, fID_b
from tbl
group by fID_a
having count(*) = 1) temp
where fID_b = 1