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

344
Visualizações
Postgres: las actualizaciones con join dan resultados incorrectos

Estoy teniendo dificultades para entender lo que estoy haciendo mal. El resultado de esta consulta muestra los mismos resultados para cada fila en lugar de actualizarse con el resultado correcto.

Mis datos

Estoy tratando de actualizar una tabla de estadísticas sobre un conjunto de negocios

 business_stats ( id SERIAL, pk integer not null, b_total integer, PRIMARY KEY(pk) );

los detalles de cada negocio se almacenan aquí

 business_details (id SERIAL, category CHARACTER VARYING, feature_a CHARACTER VARYING, feature_b CHARACTER VARYING, feature_c CHARACTER VARYING );

y aqui una tabla que asocia el pk con la categoria

 datasets (id SERIAL, pk integer not null, category CHARACTER VARYING; PRIMARY KEY(pk) );

Que hice mal)

 UPDATE business_stats SET b_total = agg.total FROM business_stats b, ( SELECT d.pk, count(bd.id) total FROM business_details AS bd INNER JOIN datasets AS d ON bd.category = d.category GROUP BY d.pk ) agg WHERE b.pk = agg.pk;

El resultado de esta consulta es

 | id | pk | b_total | +----+----+-----------+ | 1 | 14 | 273611 | | 2 | 15 | 273611 | | 3 | 16 | 273611 | | 4 | 17 | 273611 |

pero si ejecuto solo SELECT, los resultados de cada paquete son completamente diferentes

 | pk | agg.total | +----+-------------+ | 14 | 273611 | | 15 | 407802 | | 16 | 179996 | | 17 | 815580 |

LA PREGUNTA

  • ¿Por qué está pasando esto?
  • ¿Por qué la cláusula WHERE no funciona?

Antes de escribir esta pregunta, he usado como referencia estas publicaciones: a , b , c

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

0

Haga lo siguiente (siempre recomiendo no unirse en Actualizaciones)

 UPDATE business_stats bs SET b_total = ( SELECT count(c.id) total FROM business_details AS bd INNER JOIN datasets AS d ON bd.category = d.category where d.pk=bs.pk ) /*optional*/ where exists (SELECT * FROM business_details AS bd INNER JOIN datasets AS d ON bd.category = d.category where d.pk=bs.pk)
over 4 years ago · Santiago Trujillo Relatório

0

El problema es su cláusula FROM. La referencia repetida a business_stats significa que no está restringiendo la unión como esperaba. Te estás uniendo a agg contra la segunda mención no relacionada de business_stats en lugar de la fila que deseas actualizar.

Algo como esto es lo que buscas ( advertencia no probada):

 UPDATE business_stats AS b SET b_total = agg.total FROM (...) agg WHERE b.pk = agg.pk;
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