2009-12-14 3 views
2

Je sais comment utiliser group_concat avec SQLite, pour effectuer les opérations suivantes:Sqlite GROUP_CONCAT sélectionner avec "besoins spéciaux"

id - f1 - f2 - f3 
1 - 1 - a - NULL 
2 - 1 - b - NULL 
3 - 2 - c - NULL 
4 - 2 - d - NULL 

select id, f1, group_concat (f2), f3 de la table groupe par f1

result: 
2 - 1 - a,b - NULL 
4 - 2 - c,d - NULL 

comme vous pouvez le voir, les ID 1 et 3 sont abandonnés, ce qui est le comportement attendu. Mais je aurais besoin:

1 - 1 - a - a,b 
2 - 1 - b - a,b 
3 - 2 - c - c,d 
4 - 2 - d - c,d 

donc, chaque enregistrement retourné, et un autre champ (f3) mis à jour avec le group_concat

toute idée comment cela pourrait se faire dans SQLite?

Merci

Répondre

3

Je ne sais pas pourquoi vous voulez, mais va ici:

select 
    outer_t.id 
,outer_t.f1 
,outer_t.f2 
,inline_view.groupfoo 
from t as outer_t 
left join (
    select 
     f1 
    ,group_concat(f2) as groupfoo 
    from t 
    group by f1 
) inline_view on inline_view.f1 = outer_t.f1 
; 
+0

+1: Meilleure option performante –

+0

Merci, fonctionne comme prévu! – user230781

4

utiliser une instruction SQL embarqué

select id, f1, f2, (select group_concat(f2) from t t2 where t2.f1 = t1.f1) 
from t t1 
+1

+1 pour l'élégance et être si gentil et doux . – feihtthief

Questions connexes