marcoscgr 0 Denunciar post Postado Agosto 27, 2012 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
marcoscgr 0 Denunciar post Postado Agosto 27, 2012 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
Motta 645 Denunciar post Postado Agosto 27, 2012 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
marcoscgr 0 Denunciar post Postado Agosto 27, 2012 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
Motta 645 Denunciar post Postado Agosto 27, 2012 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