Eu tenho uma tabela chamada visits
que está estruturada assim:
+----+--------------+-------------+
| id | name | visitor_id |
|----+--------------+-------------+
| 1 | event1 | 1 |
| 2 | event2 | 2 |
+----+--------------+-------------+
Eu tenho uma tabela chamada params
que está estruturada assim:
+----+--------------+---------------+---------------+
| id | a_key | a_value | visit_id |
|----+--------------+---------------+---------------+
| 1 | key1 | value1 | 1 |
| 2 | key2 | value2 | 1 |
| 3 | key3 | value3 | 1 |
| 4 | key1 | value1 | 2 |
| 5 | key2 | value2 | 2 |
+----+--------------+---------------+---------------+
Esta consulta procura visitas com parâmetros que são 'key1' e 'value1'.
select *
from visits
right join params as p on p.visit_id = visits.id
where a_key = 'key1' and a_value = 'value1'
Eu preciso escrever uma consulta que me dará todas as visitas que possuem parâmetros 'key1', 'value1' e também 'key3', 'value3'. Neste caso retornaria apenas a visita 1.
Qual é a maneira mais eficiente de conseguir isso?
Pensei em juntar os parâmetros novamente, mas não me parece a melhor solução.
Aqui está em um violino: