Jump to content

Query para 3 tabelas


Recommended Posts

passarito

Boa tarde,

Ando às voltas com isto já a algum tempo e lembrei-me se algum de voçês me pode dar uma ajuda.

Tenho 3 tabelas TA, TB e TRelAB.

Nas Tabelas TA e TB tenho os campos Id e Descricao

Na tabela TRelAB tenho os campos IdA e IdB (É onde faço a realação entre as tabelas TA e TB)

O que eu ando à procura é da query que vá listar a tabela TRelAB mas mostre o campo Descricao de cada uma das tabelas A e B bem como a possibilidade de ordenar essa listagem pelo campo Descricao ora da tabela TA ora da TB.

Alguém por aí que me possa ajudar?

Obrigado

 

Link to post
Share on other sites
antseq
1 hora atrás, passarito disse:

Boa tarde,

Ando às voltas com isto já a algum tempo e lembrei-me se algum de voçês me pode dar uma ajuda.

Tenho 3 tabelas TA, TB e TRelAB.

Nas Tabelas TA e TB tenho os campos Id e Descricao

Na tabela TRelAB tenho os campos IdA e IdB (É onde faço a realação entre as tabelas TA e TB)

O que eu ando à procura é da query que vá listar a tabela TRelAB mas mostre o campo Descricao de cada uma das tabelas A e B bem como a possibilidade de ordenar essa listagem pelo campo Descricao ora da tabela TA ora da TB.

Alguém por aí que me possa ajudar?

Obrigado

penso que será isto:

DECLARE @TA TABLE(Id INT, Descricao NVARCHAR(100));
INSERT INTO @TA VALUES (1, 'A1'), (2, 'A2'), (3, 'A3'), (4, 'A4'), (5, 'A5'),(6, 'A6');

DECLARE @TB TABLE(Id INT, Descricao NVARCHAR(100));
INSERT INTO @TB VALUES (1, 'B1'), (2, 'B2'), (3, 'B3'), (4, 'B4'), (5, 'B5'),(6, 'B6');

DECLARE @TRelAB TABLE(IdA INT, IdB INT);
INSERT INTO @TRelAB VALUES (1, 4), (2, 3), (3, 2), (4, 5), (5, 6),(6, 1);

SELECT A.Descricao AS DescricaoA, B.Descricao AS DescricaoB
FROM @TRelAB AB 
LEFT JOIN @TA A ON AB.IdA = A.Id
LEFT JOIN @TB B ON AB.IdB = B.Id
-- ORDER BY A.Descricao
-- ORDER BY B.Descricao

cps

  • Vote 1
Link to post
Share on other sites
passarito
Posted (edited)

Muito obrigado.

A query é para aplicar em vbscript e estou com dificuldade em aplicar a query.

Tive de a modificar para (para já vamos esquecer a ordenação):

SELECT A.Descricao AS DescricaoA, B.Descricao AS DescricaoB FROM TRelAB LEFT JOIN TA ON TRelAB .IdA = TA.Id LEFT JOIN TB ON TRelAB.IdB = TB.Id

 

Está-me a dar erro de sintaxe: Syntax error (missing operator) in query expression "TRelAB .IdA = TA.Id LEFT JOIN TB ON TRelAB.IdB = TB.Id"

Não estou a ver o que possa estar a fazer de errado.

 

Edit:

Com apenas 1 LEFT JOIN  funciona, tanto na Tabela TA como na tabela TB. Com os 2 LEFT JOIN é que dá erro.

Edited by passarito
Link to post
Share on other sites
antseq
3 horas atrás, passarito disse:

Muito obrigado.
A query é para aplicar em vbscript e estou com dificuldade em aplicar a query.
Tive de a modificar para (para já vamos esquecer a ordenação):
SELECT A.Descricao AS DescricaoA, B.Descricao AS DescricaoB FROM TRelAB LEFT JOIN TA ON TRelAB .IdA = TA.Id LEFT JOIN TB ON TRelAB.IdB = TB.Id
Está-me a dar erro de sintaxe: Syntax error (missing operator) in query expression "TRelAB .IdA = TA.Id LEFT JOIN TB ON TRelAB.IdB = TB.Id"
Não estou a ver o que possa estar a fazer de errado.
Edit:
Com apenas 1 LEFT JOIN  funciona, tanto na Tabela TA como na tabela TB. Com os 2 LEFT JOIN é que dá erro.

Viva...

O único erro que estou a ver, é que removeu o(s) table(s) alias(es) ("TA A" , "TB B") e no entanto está a usar os mesmos (aliases) no select "A.xxx, B.xxxx"

Sem o(s) table(s) alias(es) deveria estar "SELECT TA.Descricao AS DescricaoA, TB.Descricao AS DescricaoB".

Há um espaço (não intencional) entre a tabela e o campo "TRelAB .IdA", mas já testei e o espaço apesar de não desejável, funciona na mesma e não causa o tal erro.

Experimente com o TA... TB... no SELECT e remova o espaço a mais, se mesmo assim não funcionar, sugiro correr a query no SQL Management Studio, que poderá ajudar (IntelliSense) a identificar/salientar a parte da query que poderá estar incorrecta.

cps,

  • Vote 1
Link to post
Share on other sites
passarito

Boas,

Sim, no SELECT tenho os T's, "SELECT TA.Descricao AS DescricaoA, TB.Descricao AS DescricaoB" e também não tenho o espaço.

Às vezes a culpa é do copy/paste, outras é de não o fazer 😬

Como disse, com apenas 1 LEFT JOIN  funciona, tanto na Tabela TA como na tabela TB. Com os 2 LEFT JOIN é que dá erro. provavelmente o VBScript do ASP não comporta este tipo de query.

A minha dúvida era se quando se passava de um LEFT JOIN para outro, não poderia faltar uma virgula, um AND, um ON, uns parentises, .... ???

"SELECT TA.Descricao AS DescricaoA, TB.Descricao AS DescricaoB FROM TRelAB LEFT JOIN TA ON TRelAB.IdA = TA.Id <AQUI> LEFT JOIN TB ON TRelAB.IdB = TB.Id"

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.