Jump to content
nunopicado

Desafio MySQL (Pelo menos para mim ;) Query a 6 tabelas

Recommended Posts

nunopicado

Boas

Ando a fazer um software em Delphi/MySQL e preciso de mostrar uma grelha que vai buscar informação a 6 tabelas diferentes...

Ora, visto eu ser novo em programação SQL, o desafio está lançado, e dito por outras palavras, estou-me a ver grego.

Então a ideia é a seguinte, caso algum de vocês tenha tempo e paciência para tentar dar uma luz aqui ao problema:

Na grelha preciso que apareça o seguinte:

1. Campo `ID` da tabela "Registos"

2. Campo `Data` da tabela "Registos"

3. Campo `Hora` da tabela "Registos"

4. Campo `Nome` da tabela "Terceiros"

5. Campo `Nome` da tabela "Users"

6. Campo `Tipo` da tabela "TiposInterv"

7. Campo `NSerie` da tabela "Equipamento"

8. Campo `Marca` da tabela "Marcas"

9. Campo `Modelo` da tabela "Modelos"

10. Campo `Contador` da tabela "Registos"

11. Campo `Desc` da tabela "Registos"

12. Campo `Interv` da tabela "Registos"

13. Campo `Material` da tabela "Registos"

A nível de ligações entre elas é que me está a dar cabo do juizo...

Então vai assim:

Sendo a tabela principal a "Registos", existe um campo chamado Terceiro_ID que faz a ligação com o campo Terceiros.ID, de onde se irá extrair o campo Nome. Este é à partida pacífico, pois todos os campos da Registos têm um terceiro associado.

Para a tabela Users, existe também um campo Registos.Users_ID e o respectivo Users.ID. A situação é a mesma, para cada registo, há um user atribuido.

A mesma coisa para a tabela TiposInterv: O campo Registos.TipoInterv_ID liga-se ao TiposInterv.ID e há sempre um Tipo para cada Registo.

Estes três em principio não me darão problemas... O galho vem a seguir:

Existe um campo Registos.NSerie que equivale a outro, Equipamento.NSerie. Esta tabela Equipamento é só para fazer a ligação do campo Registos.NSerie aos campos Marcas.ID e Modelos.ID (na Equipamento existem os respectivos Equipamento.NSerie, Equipamento.Marca_ID e Equipamento.Modelo_ID)

Como se não bastasse esta ligação em 2º grau, na tabela Registos, nem todas as linhas têm atribuido um NSerie, ou seja, o campo Registos.NSerie pode ser nulo.

A ideia é que, na grelha, apareçam todas as linhas da tabela Registos. Caso tenham atribuido um NSerie, o programa deve ir ver às tabelas Equipamento, Marcas e Modelos as informações respectivas, caso não tenham um NSerie, deixa os restantes campos em branco.

Isto é possível? Ou melhor, alguém sabe como chegar lá?

Se for preciso, posso enviar o dump da base de dados para testes...

Abraço e desde já, obrigado

Nuno Picado


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
brunoais

Tenta seleccionar o registos e juntar em LEFT OUTER JOIN o resto em INNER JOIN do tipo

SELECT * from registos
LEFT OUTER JOIN Equipamento ON Equipamento.NSerie = Registos.NSerie
INNER JOIN --...
INNER JOIN --...


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
edgarzigne

http://www.liamdelahunty.com/tips/mysql_left_outer_join.php

SELECT	R.ID,R.Data,R.Hora,T.Nome,U.Nome,TI.Tipo
	,E.NSerie,MC.Marca, MD.Modelo,R.Contador
	,R.Desc,R.Interv,R.Material
FROM Registos R
INNER JOIN Terceiros T ON T.Id_Terceiro = R.Id_Terceiro
INNER JOIN Users U ON U.Id = R.Users_ID
INNER JOIN TiposInterv TI ON TI.ID = R.TipoInterv_ID
LEFT OUTER JOIN Equipamento E ON E.NSerie = R.NSerie
LEFT OUTER JOIN Marcas MC ON MC.Id = E.Marca_ID
LEFT OUTER JOIN Modelo MD ON MD.Id = E.Marca_ID

Share this post


Link to post
Share on other sites
nunopicado

É isto mesmo...  :)

Muito obrigado aos dois, ficou a trabalhar às mil maravilhas!  :):D:)


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.