Ilja: MySQL - komplexer SELECT COUNT mit Subquery

Beitrag lesen

yo,

Natürlich ist es keine Subtabelle sondern wie Du schon gesagt hast hat die FORM1 zweimal eine 1:N-Beziehung zur F1_SUB_FROM.

das bereitet mir ein wenig "bauchschmerzen". nach meinen gefühl würde ich sagen, das daten-design noch einmal überdenken. aber deine antwort wird wahrschenlich lauten, das geht nicht. also müssen wir deine abfrage finden.

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.

ok, ich gehe mal davon aus, dass du beide abfragen schon einzeln überprüft hast. also die abfrage ohne subselect und dann den subselect alleine.

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.

ich gestehe, ich begreife immer nur sehr langsam. wenn ich dich richtig verstanden habe, dann ist die erste prüfung, ob es beim ersten JOIN genau 9 datensätze in der ergebnisliste gibt. dass alles läßt mich noch einmal auf das daten-design zurückkommen, aber ich wiederhole mich....

Nun muss ich zusätzlich prüfen, ob für F1_WERT119 der WERT '60' in die F1_SUB_FORM eingetragen ist.

wenn ich das richtig verstanden habe, dann muss man dafür doch keinen subselect machen, sondern eine einfache bedingung reicht oder habe ich das falsch verstanden, meinst du die anzahl der Join-Datensätze gleich 6 ?

F1_WERT119 = '60' ???

Meine Idee war eben das als Subselect abzufragen. Jedoch bekomme ich als Ergebnis immer ANZAHL = 9. Den Teil Subselect ignoriert er völlig.

der subselect macht auch nichts anderes, so er denn richtig funktioniert, dass er von den 9 Datensätze aus der ersten abfrage durch die bedingung datensätze ausschließt. scheinbar erfüllen aber alle 9 Datensätze die bedinung.

da ist noch eine sache, die ich nicht verstehe und zwar den einsatz der truncate-funktion.

truncate('1',0), ist nämlich gleich den wert 1, deswegen könnte man schreiben form1.F1_WERT056 = 1. genauso mit den anderen truncate('60',0), das ist einfach mal 60. warum also die truncate funktionen ?

was du im subselect also prüfst ist, ob 6 < gefunden datensätze in dem subselect sind. da der subselect aber --> uabhängig <-- von der ersten abfrage ist, sprich nicht korrelierend wird die bedingung eben für alle neun datensätze true sein oder für keinen. deswegen auch kein wunder, dass du zum ergebnis 9 kommst. es geht so nur 9 oder 0. willst du einen bezug haben, musst du einen beuzg in den subselect mit reinbringen und das geht bei gleichnamigen tabellen eben nur über aliasnamen, die ich schon mal erwänht habe. was aber genau prüft nun der subselect.

er schaut, ob der Join mehr als 6 ergebnisdatensätze findet. der JOIN ist aber nicht unproblematisch, es fehlt wie gesagt der bezug zu der ersten abfrage. ich kann noch nicht ganz sehen, wie er aussieht, da ich mit tabellen, die zweifach miteinander verbunden sind, noch nicht gesehen habe. ich rate mal, dass ein bezug der spalte F1_WERT033 und F1SUB_ID mit rein muss. aber dazu musst du wie gesagt alias-namen verwenden.

ich hoffe, das geschwafel ist verständlich. ich glaube, ich habe viel blonde locken gequatscht und wenig konkretes....

Ilja