有没有办法在不使用多个 SELECT 语句的情况下将 select 元素与选中的项目相关联?
Is there a way to select elements associated with checked items without using multiple SELECT statements?
我正在尝试进行查询,以选择仅在复选框列表中选中所有交通工具的地方的社区 ID。例如,如果选中 'Bus' 和 'Railway',它应该给我 7,8,如果只选中 'Railway',它应该给我 7,8,11。 'transporte' table 是这样的
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 个 SELECT 语句和 N 个选中框的情况下执行相同的查询?
一种方法是使用聚合:
select b_codigo
from transporte
where tipo_transporte in ('Bus', 'Railway (FGC)')
group by b_codigo
having count(distinct tipo_transporte) = 2
要与 HAVING
子句进行比较的数字需要与 IN 子句的元素数相匹配。
我正在尝试进行查询,以选择仅在复选框列表中选中所有交通工具的地方的社区 ID。例如,如果选中 'Bus' 和 'Railway',它应该给我 7,8,如果只选中 'Railway',它应该给我 7,8,11。 'transporte' table 是这样的
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 个 SELECT 语句和 N 个选中框的情况下执行相同的查询?
一种方法是使用聚合:
select b_codigo
from transporte
where tipo_transporte in ('Bus', 'Railway (FGC)')
group by b_codigo
having count(distinct tipo_transporte) = 2
要与 HAVING
子句进行比较的数字需要与 IN 子句的元素数相匹配。