| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/03/2005 16:58:24
|
ranophoenix
JavaEvangelist
![[Avatar]](/images/avatar/c8e3407440b018f4d16df.jpg)
Membro desde: 28/02/2004 22:49:47
Mensagens: 389
Offline
|
Tenho um relacionamento muitos-para-muitos e quero selecionar todos os registros de uma tabela onde pelo menos um elemento do conjunto A apareça no conjunto B. Alguém já passou por algum problema parecido que possa ajudar!?
Ex:
Seria uma coisa mais ou menos assim:
SELECT *
FROM Tabela
WHERE
(SELECT com várias linhas para uma coluna como resultado) //Seria o conjunto A
COMPARADOR(?essa é a dúvida)
(outro SELECT com várias linhas para uma coluna como resultado) //Seria o conjunto B
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/03/2005 19:59:31
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Não sou especialista em queries, mas sei que dependendo do banco de dados, além da cláusula UNION (e UNION DISTINCT), existe a cláusula MINUS, EXCEPT ou INTERSECT.
Essas cláusulas estão presentes no HSQLDB.
No Oracle, existem UNION, UNION ALL, MINUS e INTERSECT.
|
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/03/2005 10:36:21
|
ranophoenix
JavaEvangelist
![[Avatar]](/images/avatar/c8e3407440b018f4d16df.jpg)
Membro desde: 28/02/2004 22:49:47
Mensagens: 389
Offline
|
Estou usando o PostgreSql. Vou dar uma olhada na documentação para ver se existe estes operadores que vc me disse. Seria ótimo se existe um IN de conjunto para conjunto e não só de elemento para conjunto.
Brigadão amigo!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/03/2005 11:03:52
|
ranophoenix
JavaEvangelist
![[Avatar]](/images/avatar/c8e3407440b018f4d16df.jpg)
Membro desde: 28/02/2004 22:49:47
Mensagens: 389
Offline
|
Ficou assim:
SELECT *
FROM Tabela
WHERE EXISTS (
(SELECT com várias linhas para uma coluna como resultado) //Seria o conjunto A
INTERSECT
(outro SELECT com várias linhas para uma coluna como resultado) )//Seria o conjunto B
Isto é, se pelo menos um elemento do conjunto A for igual a um elemento do conjunto B, então exiba o registro. E agora um desafio:
E se eu quiser exibir um registro se, e somente se, o conjunto A for igual ao conjunto B.
Até mais.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/03/2005 14:41:53
|
kartler
JavaEvangelist
![[Avatar]](/images/avatar/7647966b7343c29048673252e490f736.png)
Membro desde: 22/09/2002 13:16:11
Mensagens: 479
Localização: Fortal-CE
Offline
|
Select duplo não resolveria seu problema ?
|
"...Em verdade Elias virá primeiro e restaurará todas as coisas." MT:17-11
http://www.google.co.il/search?q=java&hl=iw&lr=lang_iw&start=30&sa=N |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/03/2005 14:50:10
|
ranophoenix
JavaEvangelist
![[Avatar]](/images/avatar/c8e3407440b018f4d16df.jpg)
Membro desde: 28/02/2004 22:49:47
Mensagens: 389
Offline
|
Como assim????
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/03/2005 17:32:45
|
fabio.patricio
GUJ Master
Membro desde: 04/01/2004 02:51:33
Mensagens: 1512
Localização: Porto Alegre - RS
Offline
|
ranophoenix wrote:Tenho um relacionamento muitos-para-muitos e quero selecionar todos os registros de uma tabela onde pelo menos um elemento do conjunto A apareça no conjunto B. Alguém já passou por algum problema parecido que possa ajudar!?
Ex:
Seria uma coisa mais ou menos assim:
SELECT *
FROM Tabela
WHERE
(SELECT com várias linhas para uma coluna como resultado) //Seria o conjunto A
COMPARADOR(?essa é a dúvida)
(outro SELECT com várias linhas para uma coluna como resultado) //Seria o conjunto B
Olá,
Onde "ID" é tua chave primaria ou coluna que queira comparar a existencia no conjunto.
|
Fabio Patricio
http://blog.wansoft.com.br
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/03/2005 17:34:09
|
fabio.patricio
GUJ Master
Membro desde: 04/01/2004 02:51:33
Mensagens: 1512
Localização: Porto Alegre - RS
Offline
|
ranophoenix wrote:Ficou assim:
SELECT *
FROM Tabela
WHERE EXISTS (
(SELECT com várias linhas para uma coluna como resultado) //Seria o conjunto A
INTERSECT
(outro SELECT com várias linhas para uma coluna como resultado) )//Seria o conjunto B
Isto é, se pelo menos um elemento do conjunto A for igual a um elemento do conjunto B, então exiba o registro. E agora um desafio:
E se eu quiser exibir um registro se, e somente se, o conjunto A for igual ao conjunto B.
Até mais.
Olá,
Faz igual ao SELECT que postei no outro exemplo, mas compara todos as colunas necessarias.
]['s
|
Fabio Patricio
http://blog.wansoft.com.br
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/03/2005 08:37:39
|
chicobento
JavaGuru
![[Avatar]](/images/avatar/c8e721e640e463f34fdd4.gif)
Membro desde: 14/06/2004 01:44:04
Mensagens: 226
Localização: Campinas
Offline
|
ranophoenix wrote:Estou usando o PostgreSql. Vou dar uma olhada na documentação para ver se existe estes operadores que vc me disse. Seria ótimo se existe um IN de conjunto para conjunto e não só de elemento para conjunto.
Não sei se entendí o que vc quis dizer, mas no Oracle:
[]'s
|
SCEA 5 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/03/2005 10:02:53
|
fabio.patricio
GUJ Master
Membro desde: 04/01/2004 02:51:33
Mensagens: 1512
Localização: Porto Alegre - RS
Offline
|
chicobento wrote:
Não sei se entendí o que vc quis dizer, mas no Oracle:
[]'s
Olá,
Esta consulta da o mesmo efeito usando a clausula EXISTS, a diferenca é que o IN é muito menos eficiente. Recomendo usar somente em casos onde nao de pra utilizar outra saida.
]['s
|
Fabio Patricio
http://blog.wansoft.com.br
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/03/2005 08:18:33
|
ranophoenix
JavaEvangelist
![[Avatar]](/images/avatar/c8e3407440b018f4d16df.jpg)
Membro desde: 28/02/2004 22:49:47
Mensagens: 389
Offline
|
Na realidade o INTERSECT em conjunto com o exists funcionou do jeito que eu estava esperando. Com o IN recebo um erro, pois a minha query da esquerda retorna um conjunto de dados, e não uma única linha, e como o operado IN é para comparação de elemento com conjunto dá pau. Se eu tivesse certeza de que a query da esquerda retornasse somente uma linha sem dúvida usaria o IN, mas o relacionamento é de muitos-para-muitos e a comparação é a nível de chave estrangeira e não primária. Mas vou meditar mais sobre o assunto.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/01/2012 15:04:49
|
BolivarAmancio
Smalltalk
Membro desde: 31/08/2011 08:56:07
Mensagens: 4
Offline
|
Ola galera,
Estou com uma duvida em consulta no sql, sou iniciante com sql meu conhecimento pouco, gostaria que ajudassem.
Tenho a seguinte tabela
Preciso verificar o código do produto mais vendido, alguém pode me dar uma ideia de por onde começar?
Grato desde já,
Bolivar Amâncio Neto
|
|
|
 |
|
|