J'ai une application qui utilise SQLite pour stocker des données localement. Il peut y avoir plus d'un fichier stockant les données. Tous les fichiers contiennent une liste d'éléments, mais un seul d'entre eux a le statut "correct" pour l'utilisateur actuel (en gros, il y a un utilisateur "db" dans $ HOME et un "système" dans/etc).Obtenir la "version" spécifique d'une colonne
Habituellement, les deux fichiers contiendront la même liste d'éléments, et seule la colonne d'état sera différente. Si, cependant, l'un ou l'autre contient des éléments qui ne sont pas dans les deux, je veux aussi ces données.
SQLite ne possède pas FULL OUTER JOIN.
Une solution que je suis venu avec c'est:
SELECT item, group_concat(status) AS status FROM (SELECT item,status FROM items UNION SELECT item,status FROM otherdb.items) GROUP BY item;
Et puis l'analyse de la sortie séparés par des virgules « état » pour obtenir le statut de « droit ». Je voudrais cependant une solution SQL pure.
Les valeurs que je veux pour le statut sont:
If any = 1, status = 1
elif any = -1, status = -1
elif any = 2, status = 2
elif any = -2, status = -2
else status = 0 or NULL
statut ne peut (dans la db) de -2, -1,0, NULL, 1,2 donc cela couvre toutes les données.
S'il y a une solution qui donne seulement celle qui est différente de zéro et non nulle, cela pourrait fonctionner aussi, bien que je préférerais ce qui précède.