Subselect só forçando

Delphi

25/07/2006

Pessoal, estou precisando fazer uma consulta com uso de subselect, só que está falhando, a sentença deve ser a seguinte:

select C.CODIGO, C.VALOR, C.DATA, C.NRORDEM, 
       (select P.COD_VENDEDOR from DBPEDIDOS P where P.NRORDEM = C.NRORDEM) as COD_VENDEDOR
from DBCAIXA C
where C.CODIGO = 35059


Me resulta o seguinte:

3509 | 10 | 11/7/2006 | 39956 | [color=red:66ef2e0ab8]<nil>[/color:66ef2e0ab8]

Mas na verdade, o resultado deveria ser o resultado da sentença abaixo:

select C.CODIGO, C.VALOR, C.DATA, C.NRORDEM, 
       (select P.COD_VENDEDOR from DBPEDIDOS P where P.NRORDEM = 39956) as COD_VENDEDOR
from DBCAIXA C
where C.CODIGO = 35059


Me resulta o seguinte:

3509 | 10 | 11/7/2006 | 39956 | [color=Red:66ef2e0ab8]1[/color:66ef2e0ab8]

A segunda sentença funfa direitinho, mas só pq eu forço o valor de NRORDEM na subselect!!!

Qual é o motivo disto acontecer???


Aloizio Castro

Aloizio Castro

Curtidas 0

Respostas

Night_man

Night_man

25/07/2006

tu ja tentou fazer um join ao inves de um subselect, tipo:

select C.CODIGO, C.VALOR, C.DATA, C.NRORDEM, P.COD_VENDEDOR
from DBCAIXA C
inner join DBPEDIDOS P on P.NRORDEM = C.NRORDEM
where C.CODIGO = 35059


GOSTEI 0
Aloizio Castro

Aloizio Castro

25/07/2006

Jah sim... com join funfa direitinho.... fica joinha joinha...... mas gostaria de fazer com subselect :?

Não tem solução???


GOSTEI 0
Aloizio Castro

Aloizio Castro

25/07/2006

Jah sim... com join funfa direitinho.... fica joinha joinha...... mas gostaria de fazer com subselect :?

Não tem solução???


GOSTEI 0
Rjun

Rjun

25/07/2006

Uma pergunta que não quer calar. Por que você não quer utilizar o Join?


GOSTEI 0
Rjun

Rjun

25/07/2006

Bom, talvez ele faça o subselect primeiro e ainda não tenha o valor para C.NRORDEM. Por isso ele retorna Null. Isso é um chute.


GOSTEI 0
Aloizio Castro

Aloizio Castro

25/07/2006

Uma pergunta que não quer calar. Por que você não quer utilizar o Join?


Acredito que uma subselect seria mais rapido nesta situação!


GOSTEI 0
Aloizio Castro

Aloizio Castro

25/07/2006

Bom, talvez ele faça o subselect primeiro e ainda não tenha o valor para C.NRORDEM. Por isso ele retorna Null. Isso é um chute.


Tb acredito nesta hipotese, tanto q qdo eu defino o valor para o campo [b:cd26a489f1]C.NRORDEM[/b:cd26a489f1] a coisa funciona!!
E solução para isto :roll: ?


GOSTEI 0
Rjun

Rjun

25/07/2006

Desempenho de banco de dados é algo complicado, mas não tenho certeza se um subselect realmente é mais rápido.


GOSTEI 0
Night_man

Night_man

25/07/2006

eu sempre prefiro fazer um join a um subselect, acho mais seguro e se estiver fazendo a uniao com chave ou indice fica muito rapido


GOSTEI 0
POSTAR