Matze: MySQL - komplexer SELECT COUNT mit Subquery

Beitrag lesen

Hallo Yo,

erstmal danke für Deine Antwort.
Nunja, was die Namensgebung angeht. Das Datenmodell ist absolut abstrakt. Womit die Namen etwas ungewohnt sind. right :-(.

Deine Sortierung ist soweit völlig korrekt. Das Problem an dem Befehl ist der Part nach F1_MODUL = '16/1'.
Natürlich ist es keine Subtabelle sondern wie Du schon gesagt hast hat die FORM1 zweimal eine 1:N-Beziehung zur F1_SUB_FROM.
Einmal im Feld F1_WERT033 und einmal im Feld F1_WERT119. In der F1_SUB_FORM sind für F1_WERT033 9 Datensätze vorhanden, für F1_WERT119 sind es 6 Datensätze.
Geprüft werden muss, ob aus der Werteliste für F1_WERT033 ein Wert eingetragen werden muss, was auch problemlos funktioniert. Wenn als ANZAHL der Wert 9 selektiert wird, ist kein Wert eingetragen und kann entsprechend ausgewertet werden.
Nun muss ich zusätzlich prüfen, ob für F1_WERT119 der WERT '60' in die F1_SUB_FORM eingetragen ist.
Meine Idee war eben das als Subselect abzufragen. Jedoch bekomme ich als Ergebnis immer ANZAHL = 9. Den Teil Subselect ignoriert er völlig.
Ich muss das ganze in einem einzigen SQL-Befehl unterbringen und mir fehlt z.Z. offen gestanden eine Idee wie man das ganze noch anders Abfragen könnte. Zumal zumindest mit meiner Version MySQL noch keine Views unterstützt.

Ich hoffe das war jetzt etwas verständlicher.
Viele Grüsse
Matze

yo,

zum einen sind die tabellen und spalten-namen meiner meinung nach ein wenig unglücklich gewählt. es is nur ein vorschlag, aber ich würde versuchen namen zu nehmen, aus denen man den sinn lesen kann. das macht vor allem für aussenstehende einfacher zu verstehen.

Ich habe eine Tabelle (form1) mit einer Subtabelle (f1_sub_from). In der Tabelle form1 ist jeweils die ID der Sätze aus f1_sub_form enthalten

ok, eine 1:n beziehung der beiden tabellen, wobei es subtabellen meiner meinung nach nicht gibt. aber ist auch nicht so wichtig. ich habe mal versucht, deine alte abfrager ein wenig zu sortieren.

SELECT count(*) as ANZAHL
FROM form1, f1_sub_form
WHERE form1.F1_WERT033 = f1_sub_form.F1SUB_ID
AND f1sub_wert NOT IN ('3', '8', '9', '10', '12')
AND f1sub_wert NOT BETWEEN 16 AND 56
AND form1.F1_WERT056 = truncate('1',0)
AND form1.F1_KEY1 = '6054061'
AND F1_MODUL = '16/1'
AND truncate('6',0) <
   (SELECT COUNT(*) As ANZAHL2
    FROM form1, f1_sub_form
    WHERE F1_WERT119 = f1sub_id
    AND f1sub_wert <> truncate('60',0)
   )

der erste kritische punkt ist, du hast keine aliasnamen für die tabellen verwendet. das mag bei einem subselect vielleicht unkritisch sein, aber trotzdem stehen in einer abfrage, zweimal die gleichen tabellen und ich würde dann lieber alias namen einsetzten, um die spalten eindeutig unterscheiden zu können.

der zweite kritische punkt ist meiner meinung nach der, dass die beiden tabellen mit der 1:n beziehung scheinbar über verschiedene spalten miteinander verbunden sind oder aber in dem subselect fehlt die JOIN bedingung.

ich vermute, dein problem könnte in dem daten-desgn liegen. aber dafür wäre es hilfreich, wenn du noch mal genauer erklären könntest, was genau du machen willst und wie deine tabellen genau aussehen, spriche welche spalten wofür stehen.

Ilja