Maison >base de données >tutoriel mysql >Pourquoi les colonnes renvoyées par ma fonction PostgreSQL sont-elles concaténées et comment puis-je y remédier ?
L'enregistrement renvoyé par une fonction comporte des colonnes concaténées
Lors de l'utilisation d'une fonction pour récupérer des données dans un but spécifique, il peut arriver que le retour les colonnes de l'enregistrement sont concaténées en une seule colonne. Cela peut se produire lorsque la fonction est utilisée comme sous-requête dans une autre requête.
Comprendre les résultats de la fonction
Pour décomposer la ligne renvoyée par la fonction et obtenir les colonnes individuelles, exécutez simplement la fonction séparément :
SELECT * FROM account_servicetier_for_day(20424, '2014-08-12');
Cela fournira une sortie avec la colonne attendue structure.
Résolution de la requête d'origine
Pour résoudre le problème avec la requête d'origine, il existe plusieurs approches selon la version de PostgreSQL utilisée :
PostgreSQL 9.3 ou version ultérieure
Utilisez JOIN LATERAL pour connectez la sous-requête et conservez la structure des lignes :
SELECT '2014-08-12' AS day, 0 AS inbytes, 0 AS outbytes , a.username, a.accountid, a.userid , f.* -- but avoid duplicate column names! FROM account_tab a , account_servicetier_for_day(a.accountid, '2014-08-12') f -- <-- HERE WHERE a.isdsl = 1 AND a.dslservicetypeid IS NOT NULL AND NOT EXISTS ( SELECT FROM dailyaccounting_tab WHERE day = '2014-08-12' AND accountid = a.accountid ) ORDER BY a.username;
PostgreSQL 9.2 ou version antérieure
Utilisez une sous-requête pour appeler la fonction et décomposer la ligne dans la requête externe :
SELECT '2014-08-12' AS day, 0 AS inbytes, 0 AS outbytes , a.username, a.accountid, a.userid , (a.rec).* -- but be wary of duplicate column names! FROM ( SELECT *, account_servicetier_for_day(a.accountid, '2014-08-12') AS rec FROM account_tab a WHERE a.isdsl = 1 AND a.dslservicetypeid Is Not Null AND NOT EXISTS ( SELECT FROM dailyaccounting_tab WHERE day = '2014-08-12' AND accountid = a.accountid ) ) a ORDER BY a.username;
Dans les deux cas, faites attention aux noms de colonnes en double potentiels lors de la sélection des éléments décomposés. rangée.
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!