dúvida query mysql  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
mendigosujo
JavaEvangelist

Membro desde: 24/09/2007 08:28:23
Mensagens: 326
Offline

Opa..

Tenho algumas tabelas que se relacionam entre si e preciso fazer uma query do tipo:

"select * from tabela_filha where 'todas as colunas FLAG forem true' and id_pai = 123"

Como que eu coloco essa restrição que deve atender todos os registros dos filhos??

Abs



drsmachado
GUJ Expert

Membro desde: 25/09/2010 12:54:06
Mensagens: 3986
Localização: Curitiba / São José dos Pinhais - PR
Offline

Use o operando AND.

Não se esqueça, como está pesquisando em mais de uma tabela, utilize um JOIN

Rumo aos 4000
"Os homens de verdade assumem suas responsabilidades e culpas. Esquivar-se e dar desculpas é atitude dos tolos, que preferem não se comprometer".

Lugar de perguntar é no fórum!
Não respondo via MP
Não respondo por Email
Não respondo por IM
mendigosujo
JavaEvangelist

Membro desde: 24/09/2007 08:28:23
Mensagens: 326
Offline

Não..isso não funciona e não é isso que eu quero!

Eu tenho 2 tabelas e preciso retornar o objeto, apenas se TODOS os filhos estiverem com a flag true em determinada coluna:

Se eu fizer:



E vamos supor que a filha tenham 10 registros: 9 deles estão com FALSE e 1 está com TRUE....ele vai me retornar alguma coisa e não deveria retornar nada pq eu preciso apenas se TODOS estiverem TRUE.

Entendeu?
drsmachado
GUJ Expert

Membro desde: 25/09/2010 12:54:06
Mensagens: 3986
Localização: Curitiba / São José dos Pinhais - PR
Offline

Camarada, se você nunca estudou operadores lógicos, aí vai uma pequena luz:
AND é o operador lógico que retorna TRUE se e somente se, todos os operandos forem verdadeiros.
No caso, seria como o && do java e C++

Só retornaria os registros em que nome_proprio seja Joao (da maneira como está escrito) e sobrenome seja Silva (da maneira como está escrito). Caso uma das duas não seja verdadeira, o select passa à próxima linha, até o fim da tabela.

Quanto ao que você quer, desculpe, a vida é assim, nem tudo que se quer se consegue, isso vale tanto para quem vai atrás como para aqueles que esperam cair do céu.

A questão é que o objetivo do select é verificar justamente o inverso. Ou seja, você não quer pesquisar e retornar algo que esteja como TRUE, quer que o select verifique se existe alguma coisa como FALSE.

Para quem conhece a estrutura de funcionamento de um banco de dados, sabe que um select é feito para buscar alguma coisa, lendo linha a linha e utilizando regras estipuladas (where, or, and, in, between, order by, group by, etc).
Neste caso, você teria que condicionar o select principal (para trazer o que você quer) à duas condições, a primeira com dois counts, o primeiro, contando o total de registros e o segundo contanto todos os registros true. A segunda, se e somente se o count de registros seja igual ao count de true.

Isso significa que você precisa fazer um select com if de subselects...

Eu optaria por uma stored procedure...

Rumo aos 4000
"Os homens de verdade assumem suas responsabilidades e culpas. Esquivar-se e dar desculpas é atitude dos tolos, que preferem não se comprometer".

Lugar de perguntar é no fórum!
Não respondo via MP
Não respondo por Email
Não respondo por IM
tondatto
Entusiasta Java
[Avatar]

Membro desde: 26/04/2007 15:15:11
Mensagens: 16
Localização: Cuiabá/MT
Offline

Ou pode fazer assim:

 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team