Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

marcoscgr

Problema Consulta Sql

Recommended Posts

Olá galera, essa é o meu segundo Post aqui no imasters, o primeiro foi ajudando um colega ai.

 

Eu tenho uma consulta e ela deveria trazer os valores exceto os que eu coloquei no Select aninhado. Só que não está funcionando, estou utilizando o mysql:

 

 

Parte da Consulta que interessa:

   AND YEAR(aluguel_periodo.alu_data_fim) NOT IN 
   ( 
      (
           SELECT
               GROUP_CONCAT(distinct YEAR(mp2.mpar_data_vencimento))
           FROM movimento m2
               INNER JOIN movimento_parcelas mp2
           WHERE m2.ap_id = aluguel_periodo.ap_id
           AND m2.mov_id = mp2.mov_id
           AND m2.mt_id = 2
       )
   )

 

Se eu pegar e substituir o valor por um valor fixo, ele traz corretamente, porém se eu deixá-lo como acima, ele não traz o resultado correto. Exemplo:

AND YEAR(aluguel_periodo.alu_data_fim) NOT IN 
( 
 2010,2011
)

 

 

 

 

Consulta completa:

SELECT
   DATE_FORMAT(alu_data_fim, '%d/%m/%Y') AS expira,
   CONCAT(te_nome,' ',imovel.imo_endereco,', ',imo_numero,' - ',imo_bairro) AS endereco,
   CONCAT(cid_nome, '/', uf_sigla) AS cidade,
   aluguel_periodo.alu_id AS id,
   aluguel_periodo.ap_id,
   aluguel_periodo.alu_data,
   aluguel_periodo.alu_data_fim,
   aluguel_periodo.alu_data_vencimento,
   aluguel_periodo.alu_valor,
   aluguel_periodo.alu_iptu,
   movimento_parcelas.mpar_data_vencimento,

   YEAR(aluguel_periodo.alu_data) AS inicio,
   YEAR(aluguel_periodo.alu_data_fim) AS fim,
   YEAR(movimento_parcelas.mpar_data_vencimento) AS moviments,
   YEAR(NOW()) AS agora,

   (
       SELECT
           GROUP_CONCAT(distinct YEAR(mp2.mpar_data_vencimento))
       FROM movimento m2
           INNER JOIN movimento_parcelas mp2
       WHERE m2.ap_id = aluguel_periodo.ap_id
       AND m2.mov_id = mp2.mov_id
       AND m2.mt_id = 2

   ) AS movimentos


FROM aluguel

   INNER JOIN aluguel_periodo ON aluguel_periodo.alu_id = aluguel.alu_id
   LEFT JOIN movimento ON movimento.ap_id = aluguel_periodo.ap_id
   LEFT JOIN movimento_parcelas ON movimento_parcelas.mov_id = movimento.mov_id
   INNER JOIN filial ON filial.fi_id = aluguel.fi_id
   INNER JOIN empresa ON empresa.emp_id = filial.emp_id
   INNER JOIN imovel_cadastro ON imovel_cadastro.cad_id = aluguel.cad_id
   INNER JOIN imovel ON imovel.imo_id = imovel_cadastro.imo_id
   INNER JOIN tipo_endereco ON tipo_endereco.te_id = imovel.te_id
   INNER JOIN cidade ON cidade.cid_id = imovel.cid_id
   INNER JOIN uf ON uf.uf_id = cidade.uf_id

WHERE 1

   AND movimento.mt_id = 2

   AND YEAR(aluguel_periodo.alu_data_fim) NOT IN 
   ( 
      (
           SELECT
               GROUP_CONCAT(distinct YEAR(mp2.mpar_data_vencimento))
           FROM movimento m2
               INNER JOIN movimento_parcelas mp2
           WHERE m2.ap_id = aluguel_periodo.ap_id
           AND m2.mov_id = mp2.mov_id
           AND m2.mt_id = 2
       )
   )

   AND MONTH(aluguel_periodo.alu_data_fim) > 1 AND MONTH(aluguel_periodo.alu_data_fim) < 12 
   AND YEAR(aluguel_periodo.alu_data_fim) <= YEAR(NOW())

   and empresa.emp_id IN (1)
   and filial.fi_id IN (1 , 4)
GROUP BY aluguel_periodo.ap_id
ORDER BY alu_data_fim ASC

Compartilhar este post


Link para o post
Compartilhar em outros sites

O povo deve estar com medo de ler o problema, mas ele é simples...

 

O que eu tenho que fazer para o sql entender essa consulta:

 

AND YEAR(aluguel_periodo.alu_data_fim) NOT IN 
   ( 
      (
           SELECT
               GROUP_CONCAT(distinct YEAR(mp2.mpar_data_vencimento))
           FROM movimento m2
               INNER JOIN movimento_parcelas mp2
           WHERE m2.ap_id = aluguel_periodo.ap_id
           AND m2.mov_id = mp2.mov_id
           AND m2.mt_id = 2
       )
   )

 

como sendo essa:

 

AND YEAR(aluguel_periodo.alu_data_fim) NOT IN (2010,2011)

 

 

Porque ao que me parece, ele nao consegue interpretar o resultado do select como o resultado correto, e parece pular essa condição. Como se eu tivesse colocado:

AND YEAR(aluguel_periodo.alu_data_fim) NOT IN ('')

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente sem o GROUP_CONCAT

 

AND YEAR(aluguel_periodo.alu_data_fim) NOT IN  
   (  
      ( 
           SELECT 
               (distinct YEAR(mp2.mpar_data_vencimento)) 
           FROM movimento m2 
               INNER JOIN movimento_parcelas mp2 
           WHERE m2.ap_id = aluguel_periodo.ap_id 
           AND m2.mov_id = mp2.mov_id 
           AND m2.mt_id = 2 
       ) 
   )

Compartilhar este post


Link para o post
Compartilhar em outros sites

Put4 M3rds heim, uma coisa tão banal meu, era isso mesmo velho, era só remover o Group_concat.

 

Só não entendi direito o porque?

 

 

Valeu pela força brother....

Compartilhar este post


Link para o post
Compartilhar em outros sites

O group_concat faz um pivot do resultado da query, o in espero um resultado normal em linha/coluna.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.