2016-01-28 1 views
0

У меня есть таблица со следующими столбцамиВозвратить SELECT, матч, где две строки совпадает с различными значениями столбца

drug_id | image_filename | cat_id | desc_id | drug_name 
--------|----------------|--------|---------|-------- 
    3  picx.jpg   3   6  bla1 
    3  picy.jpg   3   6  bla2 < 
    3  picy.jpg   5   3  bla2 < match! 
    3  picz.jpg   3   6  bla2 
    5  pixx.jpg   5   3  bla3 

Мне нужен запрос, который возвращает все уникальные drug_name где drug_id то же самое, что image_filename матчи , AND cat_id = 3 И desc_id = 6 И cat_id = 5 И desc_id = 3.

Другими словами, мне нужна какая-то логика GROUP BY с count(*)=2, но поскольку мне нужно, чтобы определенные условия столбца были разными для соответствия, все, что я пытаюсь, не работает.

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

ответ

2

Один простой способ состоит в использовании агрегации с пунктом having:

select drug_name, drug_id, image_filename 
from t 
group by drug_name, drug_id, image_filename 
having sum(cat_id = 3 and desc_id = 6) > 0 and 
     sum(cat_id = 5 and desc_id = 5) > 0; 

Каждое условие в статье, имеющей проверяет, что один из комбинации значений присутствует.

+0

ok ... HAVING это новое для меня ... позвольте мне попробовать – menriquez

+0

, похоже, это работает SUPER хорошо ... спасибо за то, что указали мне в этом направлении! – menriquez

Смежные вопросы