Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Alternativa

Essa foi minha resposta ao exercício:

select c.nome, count(m.id) from curso c
    -> join matricula m on m.curso_id = c.id
    -> where m.tipo in ('PAGA_PF', 'PAGA_PJ')
    -> group by c.nome;

Esse foi o resultado:

+---------------------------------+-------------+
| nome                            | count(m.id) |
+---------------------------------+-------------+
| Desenvolvimento web com VRaptor |           1 |
| Scrum e métodos ágeis           |           1 |
| SQL e banco de dados            |           2 |
+---------------------------------+-------------+
3 rows in set (0.00 sec)

Eu imaginei que uma alternativa seria juntar o "in" com o "like", tentei um "like in" (rsrs), não deu certo, pesquisei no google e encontrei isso:

https://stackoverflow.com/questions/1127088/mysql-like-in

"...A REGEXP might be more efficient, but you'd have to benchmark it to be sure, e.g..."

O resultado foi essa query:

select c.nome, count(m.id) from curso c
    -> join matricula m on m.curso_id = c.id
    -> where m.tipo regexp 'PF|PJ'
    -> group by c.nome;

Que gerou o mesmo resultado:

+---------------------------------+-------------+
| nome                            | count(m.id) |
+---------------------------------+-------------+
| Desenvolvimento web com VRaptor |           1 |
| Scrum e métodos ágeis           |           1 |
| SQL e banco de dados            |           2 |
+---------------------------------+-------------+
3 rows in set (0.00 sec)
2 respostas
solução!

Boa noite Jonas,

Creio que o REGEXP é uma boa alternativa ao seu problema, pois ele tem algo próximo ao LIKE e, como você usa nele uma expressão regular, pode criar grupos, que seria algo mais próximo do IN.

Fazendo o "PJ|PF", você criou algo próximo do OR. E também algo como LIKE IN('%PJ%', '%PF%') (caso o LIKE IN existisse).

Espero tê-lo ajudado.

Abraço.

Boa tarde Rafael! Obrigado pela resposta! Abraço!