Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

153
Visualizações
mostrar el nombre del equipo y el nombre de los padres usando la consulta sql

Tengo dos mesas

Mesa de equipos

 id name 1 A 2 B 3 B1 4 B2

Tabla de mapeo de equipo

 id team_id parentid 1 1 0 2 2 0 3 3 2 4 4 2

la pantalla debería ser así

 Team Name Parent Name A - B - B1 B B2 B

Por favor, ayúdame a escribir una salida de consulta sql igual que la pantalla anterior

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Esta es una mala idea. Hay dos maneras de hacer esto,

  1. ltree
  2. tabla única jerárquica

Usar la tabla única jerárquica es lo mejor para usted. Es una reorganización menor pero es mucho más semántica.

 CREATE TABLE teams ( id serial PRIMARY KEY, parent int REFERENCES teams, name text ); INSERT INTO teams (id, parent, name) VALUES ( 1, null, 'A' ), ( 2, null, 'B' ), ( 3, 2, 'B1' ), ( 4, 2, 'B2' );

Para ver un ejemplo de una consulta recursiva para esto...

 WITH RECURSIVE t(id,name,parent) AS ( SELECT t1.id, t1.name, ARRAY[]::text[] FROM teams AS t1 WHERE parent IS NULL UNION ALL SELECT t2.id, t2.name, t1.parent || ARRAY[t1.name] FROM t AS t1 JOIN teams AS t2 ON t2.parent = t1.id ) SELECT * FROM t; id | name | parent ----+------+-------- 1 | A | {} 2 | B | {} 3 | B1 | {B} 4 | B2 | {B} (4 rows)

Esto permite una jerarquía arbitrariamente profunda.

 INSERT INTO teams (id, parent, name) VALUES ( 5, 4, 'Deep' );

Ejecutando la misma consulta que la anterior,

 id | name | parent ----+------+-------- 1 | A | {} 2 | B | {} 3 | B1 | {B} 4 | B2 | {B} 5 | Deep | {B,B2} (5 rows)
over 4 years ago · Santiago Trujillo Relatório

0

Una forma es usar left join y unir teams dos veces:

 select coalesce(t1.name, '-') "Team Name", coalesce(t2.name, '-') "Parent Name" from team_mapping tm left join teams t1 on tm.team_id = t1.id left join teams t2 on tm.parentid = t2.id

entonces puede usar la subconsulta en la declaración de select :

 select coalesce((select t.name from teams t where t.id = tm.team_id), '-') "Team Name", coalesce((select t.name from teams t where t.id = tm.parentid), '-') "Parent Name" from team_mapping tm

Editar: la join de la primera respuesta anterior es incorrecta, debe left join en caso de que no haya parentid en los teams de la tabla. Además, para null s, use coalesce para convertir a - .

Demostración en sqlfiddle.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda