recherche
Maisonbase de donnéestutoriel mysqlComment éviter les lignes en double lors de l'utilisation de plusieurs agrégats de tableaux dans une requête SQL ?

How to Avoid Duplicate Rows When Using Multiple Array Aggregates in a SQL Query?

Évitez plusieurs agrégats de tableaux dans une requête

Dans votre requête, vous essayez d'utiliser plusieurs fonctions array_agg() dans une seule requête pour récupérer des tableaux de différentes tables. Cependant, cette approche conduit à des lignes en double et à des résultats déformés.

Le problème

Lorsque vous effectuez plusieurs jointures et fonctions d'agrégation, l'ensemble de résultats peut être gonflé de doublons. Dans votre cas, joindre les tables d'adresses et de jours ouvrables crée plusieurs lignes pour chaque employé, ce qui entraîne des entrées en double dans les tableaux agrégés.

Solution : agrégation et jointures séparées

Pour résoudre ce problème, il est recommandé de séparer l'opération d'agrégation du processus de jointure. Considérez les approches suivantes :

Agréger d'abord, rejoindre plus tard :

Tout d'abord, agrégez les données de chaque table séparément à l'aide de sous-requêtes. Ensuite, joignez les résultats agrégés en fonction de la clé primaire ou d'une colonne commune :

SELECT e.id, e.name, e.age, e.streets, array_agg(wd.day) AS days
FROM (
   SELECT e.id, e.name, e.age, array_agg(ad.street) AS streets
   FROM   employees e
   JOIN   address  ad ON ad.employeeid = e.id
   GROUP  BY e.id
   ) e
JOIN   workingdays wd ON wd.employeeid = e.id
GROUP  BY e.id, e.name, e.age;

Sous-requêtes corrélées ou JOIN LATERAL :

Pour un filtrage sélectif des données, pensez en utilisant des sous-requêtes corrélées ou des jointures LATÉRALES dans PostgreSQL :

Corrélé Sous-requêtes :

SELECT name, age
    , (SELECT array_agg(street) FROM address WHERE employeeid = e.id) AS streets
    , (SELECT array_agg(day) FROM workingdays WHERE employeeid = e.id) AS days
FROM   employees e
WHERE  e.namer = 'peter';

JOIN LATERAL (PostgreSQL 9.3 ou version ultérieure) :

SELECT e.name, e.age, a.streets, w.days
FROM   employees e
LEFT   JOIN LATERAL (
   SELECT array_agg(street) AS streets
   FROM   address
   WHERE  employeeid = e.id
   GROUP  BY 1
   ) a ON true
LEFT   JOIN LATERAL (
   SELECT array_agg(day) AS days
   FROM   workingdays
   WHERE  employeeid = e.id
   GROUP  BY 1
   ) w ON true
WHERE  e.name = 'peter';

Ces approches garantissent que les tableaux agrégés sont correctement associés aux employés correspondants, fournissant les résultats attendus.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
MySQL Blob: Y a-t-il des limites?MySQL Blob: Y a-t-il des limites?May 08, 2025 am 12:22 AM

MySqlBlobShavelimits: Tinyblob (255 bytes), blob (65 535 bytes), Mediumblob (16 777 215 bytes), et Longblob (4 294 967 295 bytes). Obseffectively: 1) considérer la compréhension de l'Impacts et de laARGELLOBBOBSEXTERNELLEMENT; 2)

MySQL: Quels sont les meilleurs outils pour automatiser la création des utilisateurs?MySQL: Quels sont les meilleurs outils pour automatiser la création des utilisateurs?May 08, 2025 am 12:22 AM

Les meilleurs outils et technologies pour automatiser la création d'utilisateurs dans MySQL incluent: 1. MySQLWorkbench, adapté à des environnements petits et moyens, faciles à utiliser mais une consommation de ressources élevées; 2. ANSIBLE, adapté aux environnements multi-serveurs, courbe d'apprentissage simple mais abrupte; 3. Scripts Python personnalisés, flexibles mais doivent assurer la sécurité des scripts; 4. Puppet et chef, adapté aux environnements à grande échelle, complexes mais évolutifs. Les besoins d'échelle, de courbe d'apprentissage et d'intégration doivent être pris en compte lors du choix.

MySQL: Puis-je rechercher dans un blob?MySQL: Puis-je rechercher dans un blob?May 08, 2025 am 12:20 AM

Oui, YouCansearchInSideAblobinMysQlutingSpecifiCTechniques.1) ConvertTheBlobtoAutf-8StringWithConvertFunctionandSearchusingLiliN.2) ForcompressedBlobs, useUncompressBeForEConversion.3)

Types de données MySQL String: un guide completTypes de données MySQL String: un guide completMay 08, 2025 am 12:14 AM

MysqloffersvariousStringDatatypes: 1) CharForfixed-LengthStrings, idéalforcenthenglenthDatalikEcountryCodes; 2) varcharforvariable-lengthstrings, adaptFieldsLikenames; 3) textTypesForLargerText, bonforblogpostsbutcanimpactperformance; 4) binaryvarb

Master MySQL Blobs: un tutoriel étape par étapeMaster MySQL Blobs: un tutoriel étape par étapeMay 08, 2025 am 12:01 AM

Tomastermysqlblobs, suivi de l'essence: 1) ChooseTheApproProProprepropriéBlobType (TinyBlob, Blob, moyenblob, longblob) BasedAdatasize.2) INSERTDATAUSINGLOAD_FILEFERAFFICY

Blob Type de données dans MySQL: un aperçu détaillé des développeursBlob Type de données dans MySQL: un aperçu détaillé des développeursMay 07, 2025 pm 05:41 PM

BLOBDATATYTYSINMYSQLAREUSEUSEFORVORAGELLARGEBINALDATALIKEIMAGSORAUDIO.1) USEBLOBTYPES (TINYBLOBTOLONGBLOB) BASEDATADATASIZENEDES. 2) StoreBlobsin Perplate PetoopTime Performance.3) Considérants

Comment ajouter des utilisateurs à MySQL à partir de la ligne de commandeComment ajouter des utilisateurs à MySQL à partir de la ligne de commandeMay 07, 2025 pm 05:01 PM

ToadDuserstomysqlfromTheCommandline, LoginaSroot, TheSusecreateUser'Username '@' host'identifiedBy'password '; TOCREATEEEWUSER.GRANTERMISSIONSWITHGRANTALLPRIVILEGESONDATABASE.

Quels sont les différents types de données de chaîne dans MySQL? Un aperçu détailléQuels sont les différents types de données de chaîne dans MySQL? Un aperçu détailléMay 07, 2025 pm 03:33 PM

MysqlofferseightStringDatatypes: char, varchar, binaire, varbinaire, blob, texte, énumé

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

Adaptateur de serveur SAP NetWeaver pour Eclipse

Adaptateur de serveur SAP NetWeaver pour Eclipse

Intégrez Eclipse au serveur d'applications SAP NetWeaver.

Télécharger la version Mac de l'éditeur Atom

Télécharger la version Mac de l'éditeur Atom

L'éditeur open source le plus populaire

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

Version Mac de WebStorm

Version Mac de WebStorm

Outils de développement JavaScript utiles