Jump to content


Photo

Ajuda Com Aplicaçaõ Que Utiliza Sql


  • Faça o login para participar
31 replies to this topic

#1 hhhhhh

hhhhhh

    Novato no fórum

  • Usuários
  • 23 posts
  • Sexo:Não informado

Posted 09/06/2005, 15:02

Olá pessoal estou com uma dúvida:

eu tenho os seguintes campos na tabela de contatos:

idt | nm_contato


tenho os seguintes campos na tabela de newsletter_cliente:

dt | fk_contato | fk_versao

e na tabela de versões:

idt | versao


onde fk_contato é chave estrangeira e aponta para o idt da tabela de contatos...e fk_versao aponta para o idt da tabela de versões

o que eu quero, é pegar todos os contatos cuja versão seja diferente da que eu estou passando...

se o campo versão fosse na tabela de contatos eu poderia fazer assim:

select * contatos where versao <> 20
ou seja, ele teria que me trazer todos os contatos cuja versão seja diferente de 20...

mas eu preciso pegar saber pela tabela newsletter_cliente..

só que eu não consigo fazer isso com o join... como posso fazer isso ???

Alguém pode me ajudar ??

Obrigado pela atenção...

:(

#2 Peri

Peri

    Consultor SAP

  • Usuários
  • 565 posts
  • Sexo:Não informado
  • Localidade:São Paulo - SP

Posted 09/06/2005, 15:08

manin pelo que vc falou , eu entendi que ficaria assim:

select ct.nm_contato from contatos ct, newsletter_cliente news, versões v where ct.idt=news.fk_contato and v.idt = news.fk_versao and v.versao != 20;

falows =)

Edição feita por: Peri, 09/06/2005, 15:27.

+-----------------------------------------------------------------------------------------------------------
UH Terêrê ... Voltei!

#3 xleandro

xleandro

    Saber eh poder

  • Usuários
  • 359 posts
  • Sexo:Não informado
  • Localidade:ES
  • Interesses:Linguagens de programaçao, SO`s, hardwares e softwares.

Posted 09/06/2005, 15:23

Tenta:
select c.nm_contato from contatos c, versões v
where c.idt = v.idt and v.versao <> 20
Nesta guerra jah conquistamos grandes e pequenas batalhas, desde as mais faceis ateh akelas que para qualquer outro mortal seria dita como inalcansavel, mas então, pq continuar? Simples...
Pq o mais importante não eh vencer todas as batalhas, mas sim perpetuar a guerra. ;o)

Meu fotolog: http://www.pixlog.net/xleandro
Leandro Pretti

#4 hhhhhh

hhhhhh

    Novato no fórum

  • Usuários
  • 23 posts
  • Sexo:Não informado

Posted 09/06/2005, 15:24

manin pelo que vc falou , eu entendi que ficaria assim:

select * from contatos ct, newsletter_cliente news, versões v where ct.idt=news.fk_contato and v.idt = news.fk_versao and v.versao != 20;

falows =)

valeu pela ajuda amigo.. mas esse SQL só retornou os contatos que estão em newsletter_cliente...

não estou conseguindo resolver esse troço... vc tem alguma outra dica ???

:(

Edição feita por: hhhhhh, 09/06/2005, 15:26.


#5 Peri

Peri

    Consultor SAP

  • Usuários
  • 565 posts
  • Sexo:Não informado
  • Localidade:São Paulo - SP

Posted 09/06/2005, 15:29

bom , ai eu verificaria se existe o registro , pq se nao retornou nada eh pq nao existe um registro em newsletter_cliente , cujo tenha um id em contato e um id em versao , onde o de versao seja diferente de 20


ps:xleandro , a tabela de relacionamento dele eh a newsletter_cliente , pq eh um relacionamento n pra n entre contato e versao , o sql que vc fez seria para uma relacao direta entre contatos e versoes e dai teria que ser uma relacao n pra 1 ou 1 pra n , aquele abraco manin

Edição feita por: Peri, 09/06/2005, 15:32.

+-----------------------------------------------------------------------------------------------------------
UH Terêrê ... Voltei!

#6 hhhhhh

hhhhhh

    Novato no fórum

  • Usuários
  • 23 posts
  • Sexo:Não informado

Posted 09/06/2005, 15:30

Tenta:
select c.nm_contato from contatos c, versões v
where c.idt = v.idt and v.versao <> 20

Olá amigo.. obrigado.. mas não funcionou...

Deêm uma olhada no meu problema:

Eu preciso pegar todo os contatos que ainda não tenham a versão que eu estarei passando no SQL... para isso eu tenho que verificar se o contato possuí essa versão na tabela newsletter_cliente... se tiver eu não pego ele...



alguém pode me ajudar ???

:(

#7 xleandro

xleandro

    Saber eh poder

  • Usuários
  • 359 posts
  • Sexo:Não informado
  • Localidade:ES
  • Interesses:Linguagens de programaçao, SO`s, hardwares e softwares.

Posted 09/06/2005, 15:43

Ah sim, a tabela newsletter_cliente me passou dispercebida heheh... Eu costumo usar o msmo id e fazer uma ligação direta entre as 2 tabelas.


No caso axo q o correto seria oq o Peri fez:
select ct.nm_contato from contatos ct, newsletter_cliente news, versões v where ct.idt=news.fk_contato and v.idt = news.fk_versao and v.versao != 20;

Soh uma duvida peri, esse != equivale ao <> ?
Nesta guerra jah conquistamos grandes e pequenas batalhas, desde as mais faceis ateh akelas que para qualquer outro mortal seria dita como inalcansavel, mas então, pq continuar? Simples...
Pq o mais importante não eh vencer todas as batalhas, mas sim perpetuar a guerra. ;o)

Meu fotolog: http://www.pixlog.net/xleandro
Leandro Pretti

#8 hhhhhh

hhhhhh

    Novato no fórum

  • Usuários
  • 23 posts
  • Sexo:Não informado

Posted 09/06/2005, 15:44

Ok Peri... eu dei uma verificada...

mas o que acontece é que ele só traz os contatos que estão na tabela de relacionamento... e não todos os contatos...

na tabela de contatos eu tenho:

idt | nome |
-----------------
1 Guilherme
2 João
3 Maria
4 Salomão


na tabela newsletter_cliente:


idt | fk_contato | fk_newsletter|
------------------------------------
1 1 26


na tabela newsletter:

idt | nome |
-----------------
26 Aviso2005


acho que agora ficou melhor para vcs darem uma avaliada...

na tabela newsletter_cliente eu tenho apenas um contato(Guilherme), que recebeu a versão 26.. certo ?

supondo que a versão que eu esteja passando no SQL
seja 26
eu quero pegar todos os contatos menos esse contato 26.. que já recebeu essa versão da newsletter...

alguém pode me dar uma luz..

Muito obrigado a todos que estão tentando me ajudar...

:(

Edição feita por: hhhhhh, 09/06/2005, 15:46.


#9 Peri

Peri

    Consultor SAP

  • Usuários
  • 565 posts
  • Sexo:Não informado
  • Localidade:São Paulo - SP

Posted 09/06/2005, 15:46

valeu pela ajuda amigo.. mas esse SQL só retornou os contatos que estão em newsletter_cliente...


eita manin , a tabela newsletter_cliente nao eh a "ligacao" entre contatos e versoes? entao esta certo em retornar contatos que estao em newsletter_cliente, afinal eh a ligacao

Eu preciso pegar todo os contatos que ainda não tenham a versão que eu estarei passando no SQL... para isso eu tenho que verificar se o contato possuí essa versão na tabela newsletter_cliente... se tiver eu não pego ele...

esta vendo , no seu problema vc diz qe precisa verificar se o contato tem versao em news ou seja , ele tem que estar em news tambem
abracao

ps: xleandro , equivale sim , eh a mesma coisa , eh que me acostumei em fazer assim =D

------------------------------------------------------------------------------------

ahh acho que entendi , vc precisa de um outer join...ele fara um retorno de todos onde quem nao tem correspondencia ficara com null no campo , no mysql seria assim:

select ct.nm_contato from contatos ct, versões v left outer join newsletter_cliente news on ct.idt=news.fk_contato where v.idt = news.fk_versao and v.versao != 20;

da uma testada , mas eh algo do tipo , falow manin

Edição feita por: Peri, 09/06/2005, 16:04.

+-----------------------------------------------------------------------------------------------------------
UH Terêrê ... Voltei!

#10 hhhhhh

hhhhhh

    Novato no fórum

  • Usuários
  • 23 posts
  • Sexo:Não informado

Posted 09/06/2005, 15:49

dá uma olhada acima por favor Peri..

#11 xleandro

xleandro

    Saber eh poder

  • Usuários
  • 359 posts
  • Sexo:Não informado
  • Localidade:ES
  • Interesses:Linguagens de programaçao, SO`s, hardwares e softwares.

Posted 09/06/2005, 15:54

Nao vai ter como vc pegar todos sem fazer uma ligação da tabela de contatos com a versao, o certo seria ou vc fazer uma ligação direta entre as duas tabelas, mas para isso precisaria ter um campo de id cujo seria igual em ambas ou entao fazer dessa tabela newsletter_cliente uma tabela de ligação entre as duas e nela tinha q tar todos os id`s de contatos e versoes, q ai dava pra fazer a ligação como o Peri fez.
Nesta guerra jah conquistamos grandes e pequenas batalhas, desde as mais faceis ateh akelas que para qualquer outro mortal seria dita como inalcansavel, mas então, pq continuar? Simples...
Pq o mais importante não eh vencer todas as batalhas, mas sim perpetuar a guerra. ;o)

Meu fotolog: http://www.pixlog.net/xleandro
Leandro Pretti

#12 hhhhhh

hhhhhh

    Novato no fórum

  • Usuários
  • 23 posts
  • Sexo:Não informado

Posted 09/06/2005, 16:02

fazer dessa tabela newsletter_cliente uma tabela de ligação entre as duas e nela tinha q tar todos os id`s de contatos e versoes, q ai dava pra fazer a ligação como o Peri fez.

poderia me dar exemplo de como fazer assim ???

PS: pessoal, desculpem pela encheção de saco.. mas eu não saco muito de SQL...


Muito Obrigado!

#13 Peri

Peri

    Consultor SAP

  • Usuários
  • 565 posts
  • Sexo:Não informado
  • Localidade:São Paulo - SP

Posted 09/06/2005, 16:05

ahh acho que entendi , vc precisa de um outer join...ele fara um retorno de todos onde quem nao tem correspondencia ficara com null no campo , no mysql seria assim:

select ct.nm_contato from contatos ct, versões v left outer join newsletter_cliente news on ct.idt=news.fk_contato where v.idt = news.fk_versao and v.versao != 20;

da uma testada , mas eh algo do tipo , falow manin



soh uma coisa , tente com right join tb , pq agora me confundi entre right e left hehehe
+-----------------------------------------------------------------------------------------------------------
UH Terêrê ... Voltei!

#14 xleandro

xleandro

    Saber eh poder

  • Usuários
  • 359 posts
  • Sexo:Não informado
  • Localidade:ES
  • Interesses:Linguagens de programaçao, SO`s, hardwares e softwares.

Posted 09/06/2005, 16:07

Olha, tava analisando melhor, axo q eu tinha intendido errado... Vc quer pegar todos os contatos que ainda nao receberam alguma versao na tabela newsletter_cliente? Todos que nao estao na tabela newsletter_cliente, eh isso?
Nesta guerra jah conquistamos grandes e pequenas batalhas, desde as mais faceis ateh akelas que para qualquer outro mortal seria dita como inalcansavel, mas então, pq continuar? Simples...
Pq o mais importante não eh vencer todas as batalhas, mas sim perpetuar a guerra. ;o)

Meu fotolog: http://www.pixlog.net/xleandro
Leandro Pretti

#15 hhhhhh

hhhhhh

    Novato no fórum

  • Usuários
  • 23 posts
  • Sexo:Não informado

Posted 09/06/2005, 16:13

Olha, tava analisando melhor, axo q eu tinha intendido errado... Vc quer pegar todos os contatos que ainda nao receberam alguma versao na tabela newsletter_cliente? Todos que nao estao na tabela newsletter_cliente, eh isso?

mais ou menos..

eu quero pegar todo os contatos que inda não tenham relaçao com a versão que eu estiver passando:

por exemplo

select..........!= 26

eu quero pegar todos os contatos... que ainda não tenham nenhuma relacionamento na tabela newsletter_cliente com a versao 26...

Muito Obrigado amigo...




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq