| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/09/2011 14:30:52
|
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
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/09/2011 14:33:07
|
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/09/2011 14:42:10
|
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?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/09/2011 14:53:30
|
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/09/2011 15:29:39
|
tondatto
Entusiasta Java
![[Avatar]](/images/avatar/acdf0905e94f9293ba3bb21d991144aa.jpg)
Membro desde: 26/04/2007 15:15:11
Mensagens: 16
Localização: Cuiabá/MT
Offline
|
Ou pode fazer assim:
|
|
|
 |
|
|