Usuário com melhor resposta
CONSULTA SQL - como formar esta query?

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
Respostas
-
Boa Tarde,
Segue uma alternativa.
Code SnippetSELECT
FROM
Tabela1WHERE
EXISTS
(SELECT UserID FROM Tabela2WHERE 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
Todas as Respostas
-
-
Boa Tarde,
Segue uma alternativa.
Code SnippetSELECT
FROM
Tabela1WHERE
EXISTS
(SELECT UserID FROM Tabela2WHERE 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
-
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 SnippetINSERT 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.
-
-
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
-
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