Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
acho q tbm pra melhorar mais você deveria criar indices nos campos da tabela.
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?
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.
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
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)
Já miora um pouco...