[firebase-br] Ajuda num UPDATE
Sandro Souza
escovadordebits em gmail.com
Seg Mar 21 16:00:43 -03 2011
Bom dia/tarde Henrique.
Grande Henrique, posso estar falando besteira, mas tente usar um alias
p/ informar que a tabela CONTPGRC do SELECT interno é exatamente a mesma
do UPDATE externo, ou seja, que se trata do mesmo registro, como por
exemplo:
UPDATE CONTPGRC C SET
C.CPR_VALCOMISS = '5',
C.CPR_DTCOMISS = '17.03.2010',
C.CPR_COMISSQUITA = '1',
C.cpr_dtcomemorativa = (
SELECT
T.data_comemorativa
FROM
tclassificado T
WHERE
T.cd_cla = C.cla_codigo)
WHERE
(C.CPR_COMISSQUITA = 0)
AND (C.CPR_CODIGO IN (
SELECT
CONTPGRC.cpr_codigo
from
contpgrc
inner join tclassificado
on (tclassificado.cd_cla = contpgrc.cla_codigo))
AND (C.cpr_tipocomiss = 'ANUNCIO')
AND (C.CPR_FUNCOMISS = '101550')
AND (C.CPR_DTIN between '01.02.2010' AND '31.12.2011')
Caso ainda sejam retornados mais de um registro no primeiro SELECT
interno, então use FIRST 1 nele.
Outra dúvida: Será que o SELECT interno do WHERE principal, com relação
ao CPR_CODIGO poderia ser melhorado?
Por exemplo, será que a seguinte condição:
AND (C.CPR_CODIGO IN (
SELECT
CONTPGRC.cpr_codigo
from
contpgrc
inner join tclassificado
on (tclassificado.cd_cla = contpgrc.cla_codigo))
Poderia ser trocada por:
AND (C.CLA_CODIGO IN(SELECT CD_CLA FROM TCLASSIFICADO))
É uma questão que só você pode resolver porque só você conhece a lógica
do seu SELECT.
Espero ter ajudado mais que atrapalhado. :D
Em 21-03-2011 12:41, Henrique Ribeiro escreveu:
> UPDATE CONTPGRC SET
> CONTPGRC.CPR_VALCOMISS = '5',
> CONTPGRC.CPR_DTCOMISS = '17.03.2010',
> CONTPGRC.CPR_COMISSQUITA = '1' ,
> CONTPGRC.cpr_dtcomemorativa = (SELECT tclassificado.data_comemorativa from
> tclassificado
> inner join contpgrc on (tclassificado.cd_cla =
> contpgrc.cla_codigo) ) *//aqui
> retorna mais de uma linha*
>
> WHERE CONTPGRC.CPR_COMISSQUITA = 0
> AND CONTPGRC.CPR_CODIGO IN (SELECT CONTPGRC.cpr_codigo from contpgrc
> inner join tclassificado on (tclassificado.cd_cla = contpgrc.cla_codigo)
> )
>
> AND CONTPGRC.cpr_tipocomiss = 'ANUNCIO'
> AND CONTPGRC.CPR_FUNCOMISS = '101550'
> AND CONTPGRC.CPR_DTIN between '01.02.2010' AND '31.12.2011'
Mais detalhes sobre a lista de discussão lista