SubQuery com Múltiplas Colunas

Firebird

17/10/2003

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)


Cesartd

Cesartd

Curtidas 0

Respostas

Afarias

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+


GOSTEI 0
Cesartd

Cesartd

17/10/2003

É uma boa saída, mas o problema é que ele não vai usar índice.

Valeu

César


GOSTEI 0
Afarias

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+


GOSTEI 0
POSTAR