有没有一种方法可以在不使用多个select语句的情况下选择与选中项关联的元素



我正在尝试进行一个查询,选择复选框列表中只选中所有交通的地方的社区ID。例如,如果检查了"公共汽车"one_answers"铁路",它应该给我7,8,如果只检查了"火车",它会给我7,8,11。"运输"表与类似

b_codigo | tipo_transporte
----------+-----------------
1 | Underground
1 | Bus
2 | Bus
2 | Underground
3 | Bus
3 | Underground
4 | Bus
4 | RENFE
4 | Underground
5 | RENFE
5 | Underground
5 | Bus
5 | Tram
6 | Bus
6 | Underground
7 | RENFE
7 | Underground
7 | Bus
7 | Railway (FGC)
8 | Underground
8 | Railway (FGC)
8 | Bus
9 | Underground
9 | Bus
10 | Underground
10 | Bus
11 | Railway (FGC)
11 | Underground
12 | Bus

我试着查询表格

SELECT DISTINCT b_codigo 
FROM transporte 
WHERE (b_codigo, 'checked1') IN (SELECT * FROM transporte) 
AND (b_codigo, 'checked2') IN (SELECT * FROM transporte) 
AND ...

和另一种形式

SELECT b_codigo 
FROM transporte 
WHERE tipo_transporte = 'checked1' 
INTERSECT 
SELECT b_codigo 
FROM transporte 
WHERE tipo_transporte = 'checked2' 
INTERSECT 
...;

两者都给出了相同的结果,但我担心这两个查询的效率。

有没有一种方法可以在不使用N个复选框数为N的SELECT语句的情况下执行相同的查询?

一种方法是使用聚合:

select b_codigo
from transporte
where tipo_transporte in ('Bus', 'Railway (FGC)')
group by b_codigo
having count(distinct tipo_transporte) = 2

HAVING子句比较的数字需要与IN子句的元素数量相匹配。

相关内容

最新更新