SubQuery com Múltiplas Colunas
Olá,
Gostaria de saber se é possível executar uma subquery que [u:eaebbadbb4]devolva[/u:eaebbadbb4] [b:eaebbadbb4]MÚLTIPLAS COLUNAS [/b:eaebbadbb4]no Interbase.
Ex:
Select a.cod_empre, a.cod_gerent, a.cod_depart
from empregado a
where [b:eaebbadbb4](a.cod_gerent, a.cod_depart)[/b:eaebbadbb4] in (Select [b:eaebbadbb4]cod_gerent, cod_depart[/b:eaebbadbb4]
from empregado
where cod_empre = 178)
Gostaria de saber se é possível executar uma subquery que [u:eaebbadbb4]devolva[/u:eaebbadbb4] [b:eaebbadbb4]MÚLTIPLAS COLUNAS [/b:eaebbadbb4]no Interbase.
Ex:
Select a.cod_empre, a.cod_gerent, a.cod_depart
from empregado a
where [b:eaebbadbb4](a.cod_gerent, a.cod_depart)[/b:eaebbadbb4] in (Select [b:eaebbadbb4]cod_gerent, cod_depart[/b:eaebbadbb4]
from empregado
where cod_empre = 178)
Cesartd
Curtidas 0
Respostas
Afarias
17/10/2003
huuummm.... temo q não... mas vc pode usar um artificiozinho::
select a.cod_empre, a.cod_gerent, a.cod_depart
from empregado a where (a.cod_gerent || a.cod_depart) in (
select cod_gerent || cod_depart
from empregado where cod_empre = 178)
se os campos não forem char ou varchar, converta usando::
cast(campo as char(n)) -- n pode ser 3, 4, 10 ... o maior necessário
T+
select a.cod_empre, a.cod_gerent, a.cod_depart
from empregado a where (a.cod_gerent || a.cod_depart) in (
select cod_gerent || cod_depart
from empregado where cod_empre = 178)
se os campos não forem char ou varchar, converta usando::
cast(campo as char(n)) -- n pode ser 3, 4, 10 ... o maior necessário
T+
GOSTEI 0
Cesartd
17/10/2003
É uma boa saída, mas o problema é que ele não vai usar índice.
Valeu
César
Valeu
César
GOSTEI 0
Afarias
17/10/2003
|É uma boa saída, mas o problema é que ele não vai usar índice
é verdade, mas se vc precisa de maior performance neste caso, pode usar uma StoredProcedure ::
set term ^;
create procedure consulta_empregados (cod_emp_ref integer)
returns (cod_empre integer, cod_gerent integer, cod_depart integer)
as
declare variable cod_ger_ref integer;
declare variable cod_dep_ref integer;
begin
select cod_gerent, cod_depart from empregado
where cod_empre = :cod_emp_ref into :cod_ger_ref, cod_dep_ref;
for select cod_empre, cod_gerent, cod_depart from empregado
where cod_gerent = :cod_ger_ref and cod_depart = :cod_dep_ref
into :cod_empre, :cod_gerent, :cod_depart do
suspend;
end^
só uma idéia, T+
é verdade, mas se vc precisa de maior performance neste caso, pode usar uma StoredProcedure ::
set term ^;
create procedure consulta_empregados (cod_emp_ref integer)
returns (cod_empre integer, cod_gerent integer, cod_depart integer)
as
declare variable cod_ger_ref integer;
declare variable cod_dep_ref integer;
begin
select cod_gerent, cod_depart from empregado
where cod_empre = :cod_emp_ref into :cod_ger_ref, cod_dep_ref;
for select cod_empre, cod_gerent, cod_depart from empregado
where cod_gerent = :cod_ger_ref and cod_depart = :cod_dep_ref
into :cod_empre, :cod_gerent, :cod_depart do
suspend;
end^
só uma idéia, T+
GOSTEI 0