Wählen Sie Datensätze basierend auf der Spaltenpriorität aus

Erstens ist der Titel dieser Frage schrecklich, aber ich habe keinen besseren Weg gefunden, um mein Problem zu beschreiben.

Es gibt wahrscheinlich einen sehr einfachen Weg, dies zu tun, aber ich konnte es nicht herausfinden. Das ist sehr ähnlich zudiese Frage, aber ich bin auf SQLite3 (iOS) ausgeführt, so dass ich vermute, meine Optionen sind viel eingeschränkter.

Ich habe eine Tabelle mit Produktaufzeichnungen. Alle Datensätze haben eine ID (Hinweis: Ich spreche nicht von der Zeilen-ID, sondern von einer für jedes Produkt eindeutigen Identifikationsnummer). Einige Produkte haben möglicherweise zwei Einträge in der Tabelle (beide mit derselben ID). Der einzige Unterschied besteht in einer speziellen Spalte (die Spalte FARBE kann entweder ROT oder GRÜN sein).

Ich möchte eine Liste einzigartiger Produkte erstellen, die auf dem Wert von COLOR basiert, wobei GRÜN Vorrang hat, wenn für dasselbe Produkt sowohl GRÜNE als auch ROTE Einträge vorhanden sind.

Kurz gesagt, wenn ich den folgenden Fall habe:

id       PRODUCT ID    COLOUR
1        1001          GREEN
2        1002          GREEN
3        1002          RED
4        1003          RED

Ich möchte, dass mein SELECT die Zeilen 1, 2 und 4 zurückgibt. Wie kann ich das erreichen?

Mein aktueller Ansatz ist es, separate Tabellen zu haben und den Join manuell durchzuführen, aber dies ist offensichtlich eine sehr schlechte Idee.

Hinweis: Ich habe versucht, den gleichen Ansatz von zu verwendenHier:

SELECT * 
  FROM xx
 WHERE f_COLOUR = "GREEN"
UNION ALL
SELECT * 
  FROM xx 
 WHERE id not in (SELECT distinct id 
                    FROM xx 
                   WHERE f_COLOUR = "GREEN");

Aber das Ergebnis, das ich bekomme, sind die Zeilen 1,2,3,4 statt nur 1,2,4. Was vermisse ich?

Bearbeiten: Noch eine Frage, bitte: Wie kann dies dazu gebracht werden, mit einer Teilmenge von Datensätzen zu arbeiten, d. H. ob ich anstelle der gesamten tabelle einige aufzeichnungen filtern wollte?

Zum Beispiel, wenn ich so etwas wie SELECT * FROM table WHERE productID LIKE "1%" hätte ... wie kann ich jedes einzelne Produkt abrufen, aber trotzdem die Farbpriorität beachten (GREEN> RED)?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage