none
CONSULTA SQL - como formar esta query? RRS feed

  • Pergunta

  •  

    Olá,

     

    Tenho a seguinte situação:

     

    Tenho 2 tabelas conforme descreverei abaixo

     

    [Tabela1]

    -UserId

    -Nome

    -Idade

    -Telefone

     

    [Tabela2]

    -UserId

    -Idioma

    -Escreve

     

     

    Neste exemplo preciso que minha consulta mostre os usuários da minha Tabela 1

    que possua exatamente 2 idiomas ex:

     

    Espanhol e Inglês

     

    o meu problema está no seguinte:

     

    eu quero que ele fale os 2 idiomas e ainda que o IDIOMA Espanhol ele escreva nível 'Avançado'

    e o IDIOMA Inglês ele escreva nível 'Intermediário'

     

    Como eu montaria essa query?

     

    Grato

    Paulo Guilherme

     

    segunda-feira, 1 de setembro de 2008 15:35

Respostas

  • Boa Tarde,

     

    Segue uma alternativa.

     

    Code Snippet

    SELECT

    FROM Tabela1

    WHERE

    EXISTS (SELECT UserID FROM Tabela2

    WHERE Tabela1.UserID = Tabela2.UserID AND Idioma = 'Inglês'

    AND Escreve = 'Intermediário') AND

    EXISTS (SELECT UserID FROM Tabela2

    WHERE Tabela1.UserID = Tabela2.UserID AND Idioma = 'Espanhol'

    AND Escreve = 'Avançado')

     

     

    [ ]s,

     

    Gustavo

     

    segunda-feira, 1 de setembro de 2008 17:16

Todas as Respostas

  • qual campo identifica o nivel como avancado ?

     

    segunda-feira, 1 de setembro de 2008 16:13
  • Boa Tarde,

     

    Segue uma alternativa.

     

    Code Snippet

    SELECT

    FROM Tabela1

    WHERE

    EXISTS (SELECT UserID FROM Tabela2

    WHERE Tabela1.UserID = Tabela2.UserID AND Idioma = 'Inglês'

    AND Escreve = 'Intermediário') AND

    EXISTS (SELECT UserID FROM Tabela2

    WHERE Tabela1.UserID = Tabela2.UserID AND Idioma = 'Espanhol'

    AND Escreve = 'Avançado')

     

     

    [ ]s,

     

    Gustavo

     

    segunda-feira, 1 de setembro de 2008 17:16
  • Paulo,

     

    Você vai precisar criar um campo pra especificar o nível do idioma, dá forma como está vc até consegue trazer os idiomas que determinado usuário fala, mas não consegue especificar o nível que ele tem.

     

    A estrutura das tabelas devem ficar assim pra satisfazer sua consulta:

     

    [Usuario]

    -UserId

    -Nome

    -Idade

    -Telefone

     

    [Idiomas]

    -CodIdioma

    -Descricao

     

    [Niveis]

    -CodNivel

    -Descricao

     

    [UtilizaIdioma]

    -UserId

    -CodIdioma

    -CodNivel

     

    Code Snippet

    INSERT INTO IDIOMAS VALUES ('1','Inglês')

    INSERT INTO IDIOMAS VALUES ('2','Espanhol')

    INSERT INTO IDIOMAS VALUES ('3','Francês')

    INSERT INTO IDIOMAS VALUES ('4','Alemão')

    INSERT INTO IDIOMAS VALUES ('5','Italiano')

     

    INSERT INTO NIVEIS VALUES ('1','BÁSICO')

    INSERT INTO NIVEIS VALUES ('2','INTERMEDIÁRIO')

    INSERT INTO NIVEIS VALUES ('3','AVANÇADO')

     

     

    Do jeito que está dá pra vc ter uma noção do que fazer. Agora é com você!!

     

    Espero ter ajudado.

    segunda-feira, 1 de setembro de 2008 17:25
  • Ola Marcelo,

     

    É o campo Escreve...

    da tabela 2

     

    grato

    Paulo

    segunda-feira, 1 de setembro de 2008 18:04
  • Olá Gustavo,

     

    Esta alternativa é parecida com a que eu estava chegando,

    Eu estava com problemas ao usar este EXISTS eu estava usando UNION e iria pegar o que fosse aparecer repetido,

    mas acho que essa sua dica vai me ajudar, dando certo eu marco como respondido ou volto aqui...

     

    Grato

    Paulo

    segunda-feira, 1 de setembro de 2008 18:07
  • Olá David,

     

    Essa sua dica não vai me servir,

    pois eu passei apenas um exemplo...

    o meu caso é um pouco mais complicado,

     

    Não é apenas o campo ESCREVE que detém o nível.

    Tenho também o Lê e o campo Fala que também tem os níveis...

     

    Dessa maneira ficaria uma combinação complexa e nem tão fácil para o cadastro, uma vez que eu preciso apenas da consulta e as tabelas já foram criadas e já possuem dados.

     

    Mas obrigado pela ajuda

    Grato

    Paulo

    segunda-feira, 1 de setembro de 2008 18:12