j'aimerai savoir s'il est possible de concatener des champs de plusieurs
record.
Je m'explique.
Supposons que j'ai un table contenant des albums
j'aimerai obtenir une chaine contenant la liste des albums d'un auteur
dans un seul champs... alors qu'évidement chaque album est dans un
record différent.
Bon j'aurai préféré une solution SQL plutot qu'un truc propriétaire, mais ca va le faire quand meme.
Si MySQL : GROUP_CONCAT
Ceci est spécifique à MySQL et n'existe pas en tant que norme SQL. De plus c'est une fonction imbécile car particulièrement anti relationnelle !
Vous pouvez en revanche utiliser la CTE (Common Table Expression) qui introduit les requêtes récursives. Aidez vous des exemples que j'ai donné dans mon cours à ce sujet : http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/ et en particulier de l'exemple IV-D : http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/#LIV-D
A +
est il imbecile de pretendre comme un certain auteur de livres sur SQL mettre toute les dates jusqu'à nos jours depuis Jésus christ codé sur 2 octet?
Lui au moins il a été capable d'écrire un livre ET de le publier....
framabook permet a n'importe quel imbecile de publier les ecrits qu'il veut donc cela n'est pas une reference d'inteligence
Alain Montfranc a écrit :
Il se trouve que helios a formulé :
SQLpro a écrit :
Dominique Ottello a écrit :
"WebShaker" <etienne@trash.com> écrivait :
Bon j'aurai préféré une solution SQL plutot qu'un truc
propriétaire, mais ca va le faire quand meme.
Si MySQL : GROUP_CONCAT
Ceci est spécifique à MySQL et n'existe pas en tant que norme SQL. De
plus c'est une fonction imbécile car particulièrement anti
relationnelle !
Vous pouvez en revanche utiliser la CTE (Common Table Expression) qui
introduit les requêtes récursives.
Aidez vous des exemples que j'ai donné dans mon cours à ce sujet :
http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/
et en particulier de l'exemple IV-D :
http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/#LIV-D
A +
est il imbecile de pretendre comme un certain auteur de livres sur SQL
mettre toute les dates jusqu'à nos jours depuis Jésus christ codé sur
2 octet?
Lui au moins il a été capable d'écrire un livre ET de le publier....
framabook permet a n'importe quel imbecile de publier les ecrits qu'il
veut donc cela n'est pas une reference d'inteligence
Bon j'aurai préféré une solution SQL plutot qu'un truc propriétaire, mais ca va le faire quand meme.
Si MySQL : GROUP_CONCAT
Ceci est spécifique à MySQL et n'existe pas en tant que norme SQL. De plus c'est une fonction imbécile car particulièrement anti relationnelle !
Vous pouvez en revanche utiliser la CTE (Common Table Expression) qui introduit les requêtes récursives. Aidez vous des exemples que j'ai donné dans mon cours à ce sujet : http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/ et en particulier de l'exemple IV-D : http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/#LIV-D
A +
est il imbecile de pretendre comme un certain auteur de livres sur SQL mettre toute les dates jusqu'à nos jours depuis Jésus christ codé sur 2 octet?
Lui au moins il a été capable d'écrire un livre ET de le publier....
framabook permet a n'importe quel imbecile de publier les ecrits qu'il veut donc cela n'est pas une reference d'inteligence
Serguei Tarassov
On 31/01/2010 22:01, WebShaker wrote:
Salut.
J'utilise postgreSQL 8.3
j'aimerai savoir s'il est possible de concatener des champs de plusieurs record. Je m'explique. Supposons que j'ai un table contenant des albums
j'aimerai obtenir une chaine contenant la liste des albums d'un auteur dans un seul champs... alors qu'évidement chaque album est dans un record différent.
Est il possible de faire ca en SQL?
Salut,
En cas commun ce n'est pas possible, mais en cas particulier dépendante de SGDB cela peut être possible.
I.e. en MS SQL Server DECLARE @str nvarchar(max); SET @str = ''; -- string vide SELECT @str = @str + Champ1 + Champ2 + ... FROM MonTable; PRINT @str;
Attention, ce hack est assez dangereux ;)
Je crois qu'en PostgreSQL les trucs de ce genre sont aussi possibles.
A la limite, tu peux toujours utiliser les curseurs rapides (read only, fas forward etc.) ou même le boucle WHILE par les lignes d'une table en utilisant la clé primaire.
A+ Serguei TARASSOV MCITP SQL Server Dev/DBA http://sgbd.arbinada.com
On 31/01/2010 22:01, WebShaker wrote:
Salut.
J'utilise postgreSQL 8.3
j'aimerai savoir s'il est possible de concatener des champs de plusieurs
record.
Je m'explique.
Supposons que j'ai un table contenant des albums
j'aimerai obtenir une chaine contenant la liste des albums d'un auteur
dans un seul champs... alors qu'évidement chaque album est dans un
record différent.
Est il possible de faire ca en SQL?
Salut,
En cas commun ce n'est pas possible, mais en cas particulier dépendante
de SGDB cela peut être possible.
I.e. en MS SQL Server
DECLARE @str nvarchar(max);
SET @str = ''; -- string vide
SELECT @str = @str + Champ1 + Champ2 + ...
FROM MonTable;
PRINT @str;
Attention, ce hack est assez dangereux ;)
Je crois qu'en PostgreSQL les trucs de ce genre sont aussi possibles.
A la limite, tu peux toujours utiliser les curseurs rapides (read only,
fas forward etc.) ou même le boucle WHILE par les lignes d'une table en
utilisant la clé primaire.
A+
Serguei TARASSOV
MCITP SQL Server Dev/DBA
http://sgbd.arbinada.com
j'aimerai savoir s'il est possible de concatener des champs de plusieurs record. Je m'explique. Supposons que j'ai un table contenant des albums
j'aimerai obtenir une chaine contenant la liste des albums d'un auteur dans un seul champs... alors qu'évidement chaque album est dans un record différent.
Est il possible de faire ca en SQL?
Salut,
En cas commun ce n'est pas possible, mais en cas particulier dépendante de SGDB cela peut être possible.
I.e. en MS SQL Server DECLARE @str nvarchar(max); SET @str = ''; -- string vide SELECT @str = @str + Champ1 + Champ2 + ... FROM MonTable; PRINT @str;
Attention, ce hack est assez dangereux ;)
Je crois qu'en PostgreSQL les trucs de ce genre sont aussi possibles.
A la limite, tu peux toujours utiliser les curseurs rapides (read only, fas forward etc.) ou même le boucle WHILE par les lignes d'une table en utilisant la clé primaire.
A+ Serguei TARASSOV MCITP SQL Server Dev/DBA http://sgbd.arbinada.com
SQLpro
Dominique Ottello a écrit :
SQLpro écrivait :
Si MySQL : GROUP_CONCAT
Ceci est spécifique à MySQL et n'existe pas en tant que norme SQL. De plus c'est une fonction imbécile car particulièrement anti relationnelle !
J'avais bien écrit : Si MySQL Que ce soit une fonction « imbécile », peut-être.
Néanmoins, pourriez-vous m'indiquer comment réécrire la requête ci-dessous, sans utiliser GROUP_CONCAT. Étant entendu que je ne peux utiliser : - que MySQL 5.1.xx - que des tables MyISAM - pas de procédures stockées
SELECT L.b_image, L.b_texte, L.b_mini, L.b_annexe, GROUP_CONCAT(CONCAT_WS('^',A.a_num,A.a_image,A.a_texte,A.a_impos) ORDER BY A.a_num SEPARATOR 'n') AS liste_annexes FROM avia_bib_livres AS L LEFT OUTER JOIN avia_bib_annexes AS A ON A.a_id = L.b_id WHERE L.b_ordre = '$numero' GROUP BY L.b_id
Vous ne pouvez pas avec MySQL.
Pensez à prendre un SGBD qui supporte correctement la norme SQL et si vous voulez quelque chose de réellement Free, PostGreSQL le fait très bien.
A +
Merci
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies *********************** http://www.sqlspot.com *************************
Dominique Ottello a écrit :
SQLpro <brouardf@club-internet.fr> écrivait :
Si MySQL : GROUP_CONCAT
Ceci est spécifique à MySQL et n'existe pas en tant que norme SQL. De
plus c'est une fonction imbécile car particulièrement anti relationnelle !
J'avais bien écrit : Si MySQL Que ce soit une fonction « imbécile »,
peut-être.
Néanmoins, pourriez-vous m'indiquer comment réécrire la requête
ci-dessous, sans utiliser GROUP_CONCAT. Étant entendu que je ne peux
utiliser :
- que MySQL 5.1.xx
- que des tables MyISAM
- pas de procédures stockées
SELECT L.b_image, L.b_texte, L.b_mini, L.b_annexe,
GROUP_CONCAT(CONCAT_WS('^',A.a_num,A.a_image,A.a_texte,A.a_impos)
ORDER BY A.a_num SEPARATOR 'n') AS liste_annexes
FROM avia_bib_livres AS L
LEFT OUTER JOIN avia_bib_annexes AS A ON A.a_id = L.b_id
WHERE L.b_ordre = '$numero'
GROUP BY L.b_id
Vous ne pouvez pas avec MySQL.
Pensez à prendre un SGBD qui supporte correctement la norme SQL et si
vous voulez quelque chose de réellement Free, PostGreSQL le fait très bien.
A +
Merci
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************
Ceci est spécifique à MySQL et n'existe pas en tant que norme SQL. De plus c'est une fonction imbécile car particulièrement anti relationnelle !
J'avais bien écrit : Si MySQL Que ce soit une fonction « imbécile », peut-être.
Néanmoins, pourriez-vous m'indiquer comment réécrire la requête ci-dessous, sans utiliser GROUP_CONCAT. Étant entendu que je ne peux utiliser : - que MySQL 5.1.xx - que des tables MyISAM - pas de procédures stockées
SELECT L.b_image, L.b_texte, L.b_mini, L.b_annexe, GROUP_CONCAT(CONCAT_WS('^',A.a_num,A.a_image,A.a_texte,A.a_impos) ORDER BY A.a_num SEPARATOR 'n') AS liste_annexes FROM avia_bib_livres AS L LEFT OUTER JOIN avia_bib_annexes AS A ON A.a_id = L.b_id WHERE L.b_ordre = '$numero' GROUP BY L.b_id
Vous ne pouvez pas avec MySQL.
Pensez à prendre un SGBD qui supporte correctement la norme SQL et si vous voulez quelque chose de réellement Free, PostGreSQL le fait très bien.
A +
Merci
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies *********************** http://www.sqlspot.com *************************