Hallo,
SQL-Queries jenseits von simpelsten SELECT, UPDATE, etc. Befehlen sind Neuland für mich. Deswegen stoße ich jetzt vor folgendem Problem an meine Grenzen:
Ich habe 2 Tabellen mit folgenden (für dieses Problem relevanten) Feldern:
Tabelle processes
ProcessID
Name
Active
Tabelle warnings
WarningID
ProcessID
Status //nimmt Werte von 0..4 an, wobei 4 der worst-case ist
Acknowledged //ist 0 wenn die Warnung noch nicht bearbeitet wurde
Mein Ziel ist: Eine vollständige Liste aller aktiven Prozesse zu erhalten wobei zusätzlich jeweils die Warnung mit dem schlechtesten Status angegeben wird, welche noch nicht bearbeitet wurde.
Bsp.:
Ich habe 5 Prozesse wobei der 3. nicht aktiv ist. An Warnungen hab ich z.B.
für Prozess 1 einen Status 3 und einen Status 4,
für Prozess 2 einen Status 2,
für Prozess 4 einen Status 1 und einen Status 3,
für Prozess 5 keine offenen Warnung.
Mein Wunschergebnis sollte also so aussehen:
Mittlerweile habe ich in Erfahrung gebracht, dass LEFT JOIN eventuell mein Freund ist. Folgende Abfrage hab ich mir inzwischen zusammenreimen können:
Nun hat diese Abfrage zwei Probleme: Einerseits werden alle Status zu einem Prozess ausgegeben, andererseits werden Prozesse für die es bearbeitete Warnungen aber keine offenen gibt, vollständig unterdrückt und nicht in der "rechten Tabelle" mit null befüllt. Das Ergebnis für o.g. Beispiel sähe also so aus:
Momentan suche ich also nach einer Lösung hierfür. Funktioniert es mit einer Abfrage? Ev. Subqueries?
Besten Dank im vorraus für jegliche Denkanstöße!
lg,
peter
SQL-Queries jenseits von simpelsten SELECT, UPDATE, etc. Befehlen sind Neuland für mich. Deswegen stoße ich jetzt vor folgendem Problem an meine Grenzen:
Ich habe 2 Tabellen mit folgenden (für dieses Problem relevanten) Feldern:
Tabelle processes
ProcessID
Name
Active
Tabelle warnings
WarningID
ProcessID
Status //nimmt Werte von 0..4 an, wobei 4 der worst-case ist
Acknowledged //ist 0 wenn die Warnung noch nicht bearbeitet wurde
Mein Ziel ist: Eine vollständige Liste aller aktiven Prozesse zu erhalten wobei zusätzlich jeweils die Warnung mit dem schlechtesten Status angegeben wird, welche noch nicht bearbeitet wurde.
Bsp.:
Ich habe 5 Prozesse wobei der 3. nicht aktiv ist. An Warnungen hab ich z.B.
für Prozess 1 einen Status 3 und einen Status 4,
für Prozess 2 einen Status 2,
für Prozess 4 einen Status 1 und einen Status 3,
für Prozess 5 keine offenen Warnung.
Mein Wunschergebnis sollte also so aussehen:
Code:
ProcessID WarningID Status 1 x 4 2 x 2 4 x 3 5 NULL NULL
Code:
SELECT processes.ProcessID, processes.Name, warnings.WarningID, warnings.Status FROM processes LEFT JOIN warnings ON (processes.ProcessID = warnings.ProcessID) WHERE processes.Active = 1 AND warnings.Acknowledged = 0
Code:
ProcessID WarningID Status 1 x 3 1 x 4 2 x 2 4 x 1 4 x 3
Besten Dank im vorraus für jegliche Denkanstöße!
lg,
peter
Kommentar