Geração de query em aplicação do tipo consulta

Possuo uma consulta com três campos do tipo select, sendo que o primeiro carrega o segundo, e o segundo carrega o terceiro. Até aí, tudo bem.
A query do último select é:

SELECT DISTINCT c.dat_data_abertura_ciclo, DATE_FORMAT(c.dat_data_abertura_ciclo, ‘%d/%m/%Y’) FROM ciclo c INNER JOIN tanque t ON c.id_tanque = t.id_tanque AND c.str_status = ‘A’ INNER JOIN projeto p ON t.id_projeto = p.id_projeto AND t.id_projeto IN {id_projeto}
A query gerada pelo scriptcase não considerou corretamente o segundo join, pois montou da seguinte forma:

SELECT DISTINCT c.dat_data_abertura_ciclo, DATE_FORMAT(c.dat_data_abertura_ciclo, ‘%d/%m/%Y’) as sc_alias_0 FROM ciclo c INNER JOIN tanque t ON c.id_tanque = t.id_tanque AND c.str_status = ‘A’ INNER JOIN projeto p ON t.id_projeto IN (10,1000000).

A query desconsiderou ON t.id_projeto = p.id_projeto e colocou no lugar ON t.id_projeto IN (10,1000000).

Alguma ideia do porque?

voce colocou o and, mas não vi o where

tente remover o AND e colocar o WHERE ficaria:

SELECT DISTINCT c.dat_data_abertura_ciclo, DATE_FORMAT(c.dat_data_abertura_ciclo, ‘%d/%m/%Y’) FROM ciclo c INNER JOIN tanque t ON c.id_tanque = t.id_tanque AND c.str_status = ‘A’ INNER JOIN projeto p ON t.id_projeto = p.id_projeto WHERE t.id_projeto IN {id_projeto}

@jair, o AND faz parte da condição JOIN, não está errado.

O que estranho é a afirmação:

Campos select em uma Grid (Consulta)?

Transforme isso em uma View e utilize uma query mais simples em cima da view.

Haroldo, me expressei errado. São campos select, mas referentes ao filtro da consulta.

1 Curtida

@InfinitusWeb é que ele falou que estava substituindo o ON, como ele colocou o AND vai fazer parte do ON, ele colocando o WHERE filtra apenas a condição que ele quer t.id_projeto IN {id_projeto}, e não colocaria no lugar do ON que esta sendo alterado

Aqui: t.id_projeto IN ({id_projeto})

O que não faz muito sentido a não ser que {id_projeto| contenha valores separados por virgula.

Quando o scriptcase captura o conteúdo do array do filtro, ele já monta a query com os valores separados com vírgula.

No modo debug como se apresenta a query?
Não pode mostrar {id_projeto} e sim o seu valor.

Essa query foi montada por vc no lookup automático do campo?

No modo debug a query é apresentada desta forma:

SELECT DISTINCT c.dat_data_abertura_ciclo, DATE_FORMAT(c.dat_data_abertura_ciclo, ‘%d/%m/%Y’) as sc_alias_0 FROM ciclo c INNER JOIN tanque t ON c.id_tanque = t.id_tanque AND c.str_status = ‘A’ INNER JOIN projeto p ON t.id_projeto IN (10,1000000)

E a query foi montada no lookup automático do campo do filtro.

Refiz a query de várias formas, mas não obtive sucesso em nenhuma. Só resolvi quando criei a view e fiz o SELECT em cima dela.
O que achei intrigante é que o filtro que carrega, via ajax, este filtro problemático, tem uma query mais complexa, mas executou sem problemas:

SELECT DISTINCT p.id_projeto, p.str_nome_projeto FROM projeto p INNER JOIN tanque t ON p.id_projeto = t.id_projeto INNER JOIN ciclo c ON t.id_tanque = c.id_tanque AND c.str_status = ‘A’
WHERE (p.str_projeto_acompanhado IN (’{sel_acompanhado}’) AND p.id_projeto IN (SELECT id_projeto FROM projetoxsec_users WHERE login = ‘[usr_login]’))
OR (’[usr_login]’ = ‘AAAAAAAA’ AND p.str_projeto_acompanhado IN (’{sel_acompanhado}’)) ORDER BY p.str_nome_projeto