[VAZA] 0 Denunciar post Postado Maio 11, 2011 Pessoal, eu tenho a seguinte query: SELECT COUNT(DISTINCT(i.chassi_abreviado)) FROM vw_ve_itenscoleta3 i WHERE i.idcliente = 147 AND i.status_coleta = 'PROCESSADA' AND i.idtipo_operacao = 11 AND i.chassi_abreviado IN (SELECT i2.chassi_abreviado FROM vw_ve_itenscoleta3 i2 WHERE i2.idcliente = 147 AND i2.status_coleta = 'PROCESSADA' AND i2.idtipo_operacao = 13) AND i.chassi_abreviado IN (SELECT i3.chassi_abreviado FROM vw_ve_itenscoleta3 i3 WHERE i3.idcliente = 147 AND i3.status_coleta = 'PROCESSADA' AND i3.idtipo_operacao = 14) Eu preciso selecionar apenas os registros onde o chassi se encontra em tipo_operacao = 11 mas também foram achados em idtipo_operacao = 13 e 14. Eu não posso apenas fazer isso: AND i2.idtipo_operacao IN (13,14), pq se eu fizer desta forma, ele pode ou não estar em 13 e 14, só que eu quero que eles estejam obrigatoriamente em 13 e em 14. Minha duvida é: Com essa query, eu percorro minha tabela 3x. Existe alguma forma de que eu possua o mesmo resultado mas que eu faça o mysql percorrer a tabela no maximo 2 vezes? Estou querendo isso, pq dessa forma a minha query fica muito pesada. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Maio 11, 2011 SELECT COUNT(DISTINCT(i.chassi_abreviado)) FROM vw_ve_itenscoleta3 i WHERE i.idcliente = 147 AND i.status_coleta = 'PROCESSADA' AND i.idtipo_operacao = 11 AND i.chassi_abreviado IN (SELECT i2.chassi_abreviado FROM vw_ve_itenscoleta3 i2 WHERE i2.idcliente = 147 AND i2.status_coleta = 'PROCESSADA' AND i2.idtipo_operacao in (13,14)) Já miora um pouco... Compartilhar este post Link para o post Compartilhar em outros sites
macielcr7 9 Denunciar post Postado Maio 12, 2011 acho q tbm pra melhorar mais você deveria criar indices nos campos da tabela. Compartilhar este post Link para o post Compartilhar em outros sites
[VAZA] 0 Denunciar post Postado Maio 12, 2011 Motta, essa foi a primeira coisa que eu fiz, só que ocorre o seguinte: o chassi pode estar em idtipo_operacao 13 ou/e em idtipo_operacao 14. Eu quero que o mesmo chassi esteja obrigatoriamente em 13 e em 14. Entendeu? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Maio 12, 2011 SELECT COUNT(DISTINCT(i.chassi_abreviado)) FROM vw_ve_itenscoleta3 i WHERE i.idcliente = 147 AND i.status_coleta = 'PROCESSADA' AND i.idtipo_operacao = 11 AND exists (SELECT i2.chassi_abreviado FROM vw_ve_itenscoleta3 i2 WHERE i2.idcliente = 147 AND i2.status_coleta = 'PROCESSADA' AND i2.idtipo_operacao in (13,14) group by i2.chassi_abreviado having count(*) > 1) Só babá se houver dois 13 ou dois 14. Compartilhar este post Link para o post Compartilhar em outros sites
[VAZA] 0 Denunciar post Postado Maio 12, 2011 sim, pode haver mais de um 13 e mais de um 14 :S Também pensei nisso :( eu tentei a seguinte query abaixo: SELECT * FROM vw_ve_itenscoleta2 WHERE chassi_abreviado = '001156' AND idtipo_operacao = ALL (SELECT idtipo_operacao FROM ve_tipo_operacoes WHERE idtipo_operacao IN (11, 13, 14)) Mas ta me retornando nulo e eu sei que esse chassi_abreviado 001156 existe para os 3 idtipo_operacao Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Maio 12, 2011 SELECT COUNT(DISTINCT(i.chassi_abreviado)) FROM vw_ve_itenscoleta3 i WHERE i.idcliente = 147 AND i.status_coleta = 'PROCESSADA' AND i.idtipo_operacao = 11 AND 2 = (SELECT count(distinct i2.chassi_abreviado) FROM vw_ve_itenscoleta3 i2 WHERE i2.idcliente = 147 AND i2.status_coleta = 'PROCESSADA' AND i2.idtipo_operacao in (13,14) group by i2.chassi_abreviado having count(*) > 1) Compartilhar este post Link para o post Compartilhar em outros sites