Spalten auslesen und mit Werten in Zeilen vergleichen

Lyran

Benutzer
Beiträge
6
Moin zusammen,

ich habe ein Problem mit dem Vergleich zweier Tabellen.

category-png.684


In der Tabelle 2 gibt es Categories, die über ein "Critical" Kennzeichen verfügen. Ist dieses auf 1 gesetzt, soll der betroffene Datensatz ausgeschlossen werden.

Es sollen nun nur Datensätze aus Tabelle 1 ausgegeben werden, die ausschließlich in Caregories, die nicht als Critical eingestuft wurden, eine 1 haben. Im Beispiel wäre das der Datensatz mit ID 1.

Wie bekomme ich diese Abfrage hin?
 

Anhänge

  • Category.PNG
    Category.PNG
    9,2 KB · Aufrufe: 26
Werbung:
Nein, es sind 30, von denen 6 über eine 1 bei Critical verfügen. Status Quo könnte ich die 6 also fix ausschließen, müsste bei zukünftigen Erweiterungen der Categories aber mein SQL ebenfalls erweitern. Ist eine dynamische Lösung sehr viel komplizierter als eine "hart verdrahtete"?
 
Ist eine dynamische Lösung sehr viel komplizierter als eine "hart verdrahtete"?
Ja und unperformanter.

Ich könnte das unter MSSQL basteln mit einer Schleife, unter Oracle weiß ich nicht wo ich die Spaltennamen herbekomme. In jedem Fall ginge es mit dynamischem SQL, theoretisch könnte man das auch in einer anderen Sprache entwickeln.
 
Die Spalten sind immerhin nach einem Schema aufgebaut, CAT001, CAT002, CAT003 und so weiter. Falls eine dynamische Lösung zu kompliziert ist wäre ich auch mit einem hartverdrahtetem SQL glücklich :)
 
Code:
SELECT    *
FROM    tabelle_1
WHERE (    spalte_a = 0
OR NOT EXISTS ( SELECT 1 FROM tabelle_2 WHERE category = 'A' AND critical = 1 ) )
AND    (    spalte_b = 0
OR NOT EXISTS ( SELECT 1 FROM tabelle_2 WHERE category = 'B' AND critical = 1 ) )
AND    (    spalte_c = 0
OR NOT EXISTS ( SELECT 1 FROM tabelle_2 WHERE category = 'C' AND critical = 1 ) )
Das geht vermutlich noch über 10 andere Wege, vieleicht auch etwas eleganter aber bestimmt nie sehr schnell :)
 
Werbung:
Sorry, aber das ist kein Schema, das ist nur Ausdruck eines vergurkten Designs.

Ich habe in diesem Fall nur begrenzten Einfluss auf das Design der Datenbank, da ich hier nur Anwender bin.

Code:
SELECT    *
FROM    tabelle_1
WHERE (    spalte_a = 0
OR NOT EXISTS ( SELECT 1 FROM tabelle_2 WHERE category = 'A' AND critical = 1 ) )
AND    (    spalte_b = 0
OR NOT EXISTS ( SELECT 1 FROM tabelle_2 WHERE category = 'B' AND critical = 1 ) )
AND    (    spalte_c = 0
OR NOT EXISTS ( SELECT 1 FROM tabelle_2 WHERE category = 'C' AND critical = 1 ) )
Das geht vermutlich noch über 10 andere Wege, vieleicht auch etwas eleganter aber bestimmt nie sehr schnell :)

Danke sehr, ich teste mal!
 
Zurück
Oben