• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

ricardocoimbra

Relacionar 3 tabelas

16 mensagens neste tópico

Como poço relacionar 3 tabelas ?

Imaginemos

Tabela - Produto

Tabela -  Caracteristicas

Tabela - Preco

Como poderia fazer uma pesquisa dentro da mesma query? e pesquisar por produto x , com  esta caracteristica a este preço.

Alguem sabe fazer essa relação?

Eu com duas fazia

SELECT * FROM  produto left join caracteristicas on produto.id=caracteristicas.id where (metia a clausula);

Agora 3 nao sei relacionar se me souberem ajudar agradecia.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

SELECT * FROM  produto left join caracteristicas on produto.id=caracteristicas.id, PRECO where (metia a clausula);

deve funcionar, as tabelas sao juntas numa e é feita a seleccao com base na condiçao q passares

existe alguma relacao entre preco e alguma das outras tabelas?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Existe em todas o campo id corresponde o mesmo.

SELECT * FROM  produto left join caracteristicas on produto.id=caracteristicas.id, PRECO where (metia a clausula);

deve funcionar, as tabelas sao juntas numa e é feita a seleccao com base na condiçao q passares

existe alguma relacao entre preco e alguma das outras tabelas?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

SELECT *

FROM Produto NATURAL JOIN Caracteristicas NATURAL JOIN Preco

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

magician nunca usei o NATURAL JOIN e como relacionas as 3 tabelas?

SELECT *

FROM Produto NATURAL JOIN Caracteristicas NATURAL JOIN Preco

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O natural join funciona assim tens duas tabelas

Tabela_1

    Coluna A

    Coluna B

Tabela_2

    Coluna A

    Coluna C

Ao fazer Tabela_1 Natural JOIN Tabela 2 ficas com

  Coluna A

  Coluna B

  Coluna C

Basicamente cria uma tabela com todos os campos em comum entre as tabelas, experimenta e vê o resultado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

magician testei e o resultado e mesmo esse que disses-te .

mas acontece que se fizeres mais um Natural JOIN ele desaparece tudo :/ já nao dá!

Isto porque, eu na 3 tabela tenho campos com o mesmo nome que o da primeira penso que seja por isso... existe alguma solução?

O natural join funciona assim tens duas tabelas

Tabela_1

    Coluna A

    Coluna B

Tabela_2

    Coluna A

    Coluna C

Ao fazer Tabela_1 Natural JOIN Tabela 2 ficas com

  Coluna A

  Coluna B

  Coluna C

Basicamente cria uma tabela com todos os campos em comum entre as tabelas, experimenta e vê o resultado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O natural join funciona assim tens duas tabelas

Tabela_1

    Coluna A

    Coluna B

Tabela_2

    Coluna A

    Coluna C

Ao fazer Tabela_1 Natural JOIN Tabela 2 ficas com

  Coluna A

  Coluna B

  Coluna C

Basicamente cria uma tabela com todos os campos em comum entre as tabelas, experimenta e vê o resultado.

tens o mesmo resultado com

Select *

From (Tabela_1 inner join Tabela_2 on Tabela_1.A=Tabela_2.A) inner join Tabela_3 on (Tabela_1.A=Tabela_3.A)

a vantagem desta forma é que podes escolher quais os atributos que ligam as duas tabelas

*não testei mas a sintaxe é algo deste género

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

vitortomaz  era mesmo isso dessa forma funcionou :P ate pk eu tinha de relacionar um campo diferente pra o da 3 tabela.

Obrigado a todos!

Um abraço

O natural join funciona assim tens duas tabelas

Tabela_1

    Coluna A

    Coluna B

Tabela_2

    Coluna A

    Coluna C

Ao fazer Tabela_1 Natural JOIN Tabela 2 ficas com

  Coluna A

  Coluna B

  Coluna C

Basicamente cria uma tabela com todos os campos em comum entre as tabelas, experimenta e vê o resultado.

tens o mesmo resultado com

Select *

From (Tabela_1 inner join Tabela_2 on Tabela_1.A=Tabela_2.A) inner join Tabela_3 on (Tabela_1.A=Tabela_3.A)

a vantagem desta forma é que podes escolher quais os atributos que ligam as duas tabelas

*não testei mas a sintaxe é algo deste género

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O natural join também permite isso mas já não me lembro exactamente da sintaxe.

Eu uso sempre o natural nunca uso os outros joins o natural faz todas as junções e exclui automaticamente o campos sem ligação.

magician testei e o resultado e mesmo esse que disses-te .

mas acontece que se fizeres mais um Natural JOIN ele desaparece tudo :/ já nao dá!

Isto porque, eu na 3 tabela tenho campos com o mesmo nome que o da primeira penso que seja por isso... existe alguma solução?

Tenta mudar o nome dos campos mas penso que não é esse o problema.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

SELECT * FROM  produto left join caracteristicas on produto.id=caracteristicas.id where (metia a clausula);

tens alguma razão especial para usar LEFT JOINs?

normalmente, para relacionar tabelas, usa-se o INNER/NATURAL JOIN, mas tem em atenção que o resultado pode ser diferente do LEFT JOIN. vê bem qual é que tens que usar. o LEFT JOIN com 3 tabelas, faz-se do mesmo modo que o INNER JOIN (para o qual já tens um exemplo).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

vitortomaz só tenho uma duvida: ao fazer

Select *

From (Tabela_1 inner join Tabela_2 on Tabela_1.A=Tabela_2.A) inner join Tabela_3 on (Tabela_1.A=Tabela_3.A)

Depois eu no while

while($m = mysql_fetch_array($query)) {

$id = $m[id];

como poço fazer para referenciar que é o id da tabela produtos e nao o da caracteristicas?

vitortomaz  era mesmo isso dessa forma funcionou :P ate pk eu tinha de relacionar um campo diferente pra o da 3 tabela.

Obrigado a todos!

Um abraço

O natural join funciona assim tens duas tabelas

Tabela_1

    Coluna A

    Coluna B

Tabela_2

    Coluna A

    Coluna C

Ao fazer Tabela_1 Natural JOIN Tabela 2 ficas com

  Coluna A

  Coluna B

  Coluna C

Basicamente cria uma tabela com todos os campos em comum entre as tabelas, experimenta e vê o resultado.

tens o mesmo resultado com

Select *

From (Tabela_1 inner join Tabela_2 on Tabela_1.A=Tabela_2.A) inner join Tabela_3 on (Tabela_1.A=Tabela_3.A)

a vantagem desta forma é que podes escolher quais os atributos que ligam as duas tabelas

*não testei mas a sintaxe é algo deste género

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Rui carlos nao existe nenhuma razao de estara usar o left join estava era a tentar resolver o meu problema...

Agora com o inner join ele dá me um Produtos.id e um Caracteristicas.id que sao valores diferentes como faço pra listar dentro do while?

while($m = mysql_fetch_array($query)) {

$id = $m[id];

SELECT * FROM  produto left join caracteristicas on produto.id=caracteristicas.id where (metia a clausula);

tens alguma razão especial para usar LEFT JOINs?

normalmente, para relacionar tabelas, usa-se o INNER/NATURAL JOIN, mas tem em atenção que o resultado pode ser diferente do LEFT JOIN. vê bem qual é que tens que usar. o LEFT JOIN com 3 tabelas, faz-se do mesmo modo que o INNER JOIN (para o qual já tens um exemplo).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

em vez de fazer SELECT *, faz apenas dos campos que precisas e do produto.id, por exemplo. ou então podes usar um AS.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tem mesmo de ser select * porque sao muitos campos, depois com AS como poderia fazer? Uma  vez que eu seleciono logo todos os campos logo penso que nao poderei fazer AS,. :/ Soluções...

em vez de fazer SELECT *, faz apenas dos campos que precisas e do produto.id, por exemplo. ou então podes usar um AS.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

penso que podes fazer algo como SELECT tabela1.*. nas tabelas que quiseres seleccionar tudo, já fica mais fácil.

0

Partilhar esta mensagem


Link 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