Ich habe eine App, die SQLite verwendet, um Daten lokal zu speichern. Es kann mehr als eine Datei geben, die die Daten speichert. Alle Dateien enthalten eine Liste von Elementen, aber nur einer von ihnen hat den "korrekten" Status für den aktuellen Benutzer (im Grunde gibt es eine "Benutzer" -DB in $ HOME und eine "systemweite" in/etc).Spezifische "Version" einer Spalte abrufen
Normalerweise enthalten beide Dateien die gleiche Liste von Elementen, und nur die Statusspalte unterscheidet sich. Wenn jedoch beide Elemente nicht in beiden enthalten sind, möchte ich auch diese Daten.
SQLite verfügt nicht über FULL OUTER JOIN.
Eine Lösung, die ich mit gekommen sind, ist dies:
SELECT item, group_concat(status) AS status FROM (SELECT item,status FROM items UNION SELECT item,status FROM otherdb.items) GROUP BY item;
Und dann die kommagetrennten Ausgang „Status“ Parsen der „richtigen“ Status zu erhalten. Ich möchte jedoch eine reine SQL-Lösung.
Die Werte, die ich für den Status wollen, sind:
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
Status nur kann (in der db) -2 sein, -1,0, NULL, 1,2 so deckt diese alle Daten.
Wenn es eine Lösung gibt, die nur den Wert ungleich null und nicht null gibt, könnte das auch funktionieren, obwohl ich das obige bevorzugen würde.