Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

fil79

join tabelas em mais de um campo

Mensagens Recomendadas

fil79

Boas

tenho a tabela rotas com os campos id,local1 e local2. Depois tenho a tabela locais com o id e o nome

Basicamente quero fazer uma listagem à tabela rotas, que me devolvia o nome do local 1 e 2.

Para tal tenho de fazer o join em dois campos da rotas. Qual a melhor maneira de fazer esta query?

Desde já agradeço

Editado por fil79

MCITP-MCTS-MCP

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo
select *
 from rotas as r inner join locais as l1
                         on r.local1 = l1.id
                 inner join locais as l2
                         on r.local2 = l2.id

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
fil79

é isso, obrigado. Agora uma outra questão, esse sql devolve-me os dois campos "nome" (origem e destino), sem distinção, de alguma forma vou ter de os distinguir para depois os listar.


MCITP-MCTS-MCP

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo
SELECT l1.nome as l1_nome,
      l2.nome as l2_nome
 FROM rotas AS r INNER JOIN locais AS l1
                         ON r.local1 = l1.id
                 INNER JOIN locais AS l2
                         ON r.local2 = l2.id


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Especifica as colunas que queres que o query devolva (em vez do *) e dá-lhes nomes mais apropriados

select tabela1.coluna2 as nome_apropriado, tabela3.coluna2 as outro_nome ...


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
fil79

$query="    SELECT lug1.name as origem,lug2.name as destino
           FROM posicao AS p
           INNER JOIN lugares AS lug1
	    ON p.lugar_1 = lug1.id
	    INNER JOIN lugares AS lug2
	    ON p.lugar_2 = lug2.id


                        ";

Perfeito, muito obrigado


MCITP-MCTS-MCP

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
fil79

agora estou com um novo problema

dentro da tabela locais existe um campo distrito, eu queria listar todos os registos dentro de um determinado distrito

SELECT lug1.distrito_id,p.preco,lug1.name as origem,lug2.name as destino
		FROM posicao AS p
   	 INNER JOIN lugares AS lug1
		ON p.lugar_1 = lug1.id
		INNER JOIN lugares AS lug2
		ON p.lugar_2 = lug2.id
		WHERE lug1.distrito_id=11

Creio que aquele WHERE deveria fazer esse filtro, mas a verdade é que devolve todos os registos da tabela

Editado por fil79

MCITP-MCTS-MCP

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
fil79

não sei se estou a perceber! Se eu por exemplo fizer um select à tabela lugares onde o id é 11, devolve 1000 registos

se usar a query acima devolve 3000!


MCITP-MCTS-MCP

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

o que impede de existir mais do que um registo na tabela "posicao" com a mesma referência para o mesmo local ?

pelos visto existem 3 para cada, até ...


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
fil79

pois foi o que pensei, mas está a devolver 3 registos triplicados no sql com o join. Mas parece de facto haver um problema nas tabelas que tenho de verificar


MCITP-MCTS-MCP

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.