我有一个名为的表visits
,其结构如下:
+----+--------------+-------------+
| id | name | visitor_id |
|----+--------------+-------------+
| 1 | event1 | 1 |
| 2 | event2 | 2 |
+----+--------------+-------------+
我有一个名为的表params
,其结构如下:
+----+--------------+---------------+---------------+
| 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 |
+----+--------------+---------------+---------------+
此查询查找参数为“key1”和“value1”的访问。
select *
from visits
right join params as p on p.visit_id = visits.id
where a_key = 'key1' and a_value = 'value1'
我需要编写一个查询,为我提供所有具有参数“key1”、“value1”以及“ key3”、“value3”的访问。在这种情况下,它只会返回访问 1。
实现这一目标的最有效方法是什么?
我考虑过再次加入参数,但这似乎不是最好的解决方案。
这是一个小提琴:
这是relational-division的一个例子。
我们在这个关于 SO 的相关答案中汇集了一系列查询技术:
对于您的情况,此查询将是最快的解决方案之一:
如果你只需要
visit_id
你甚至不需要加入表visits
。db<>fiddle here
Old sqlfiddle。