Выберите отличное значение, когда 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
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
Другие вопросы по тегам