Einzelnen Beitrag anzeigen

omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: SQL Optimierung / Erweiterung

  Alt 6. Feb 2010, 20:36
Zitat von manfred_h:
Dies widerum geht einwandfrei solange ich nur einen Wert in dem Feld habe:
Du redest in Rätseln! So kann man dir nicht helfen! Bitte artikuliere dich konkreter!

Was geht dann nicht? gibt es eine Fehlermeldung, wenn es mehrere Werte sind? Oder gibt das Statement nicht die richtigen Zeilen zurück? Welches Feld ist in deiner Aussage gemeint?

Zitat von manfred_h:
Ein Problem ist dass ich in der aktuellen Tabelle ein Feld ( NEW.SERVICE )habe das mehrere Werte beinhalten kann.
( z.B Hotel / Altersheim ... ) Es soll nun geprüft werden ob in RPL$SERVICE.SERVICE_NAME ein Wert vorhanden ist
der im Feld NEW.SERVICE auftaucht ( Es können auch mehrere sein ).
Kannst du diese Aussage mal etwas besser darlegen? "Es können auch mehrere sein" wie muss ich mir das vorstellen? Sind diese Angaben in Zeilen oder in Spalten angelegt? Innerhalb einer Zelle? Wenn ja, wie separiert? Oder wenn (hoffentlich) nein, also in Zeilen, wie sieht das konkret aus? Beispiel! Tabellen + Inhalt + Ergebnis

Zitat von manfred_h:
SQL-Code:
OR (NEW.C_NO IN (SELECT RPL$GROUPS_RIGHTS.CAMP_NO
                 FROM RPL$GROUPS
                 INNER JOIN RPL$GROUPS_RIGHTS
                   ON RPL$GROUPS_RIGHTS.GROUP_NO = RPL$GROUPS.GROUP_NO
                 WHERE RPL$GROUPS.GROUP_NO = MEMBER_GROUP))
Wo kommt in diesem Teil deines Statements "MEMBER_GROUP" her? Außerhalb der Unterabfrage? Wenn ja, dann ist das hier eine ganz schlechte Wahl, weil man den IN-Operator niemals mit der äußeren Abfrage über die WHERE-Klausel koppeln sollte. Dafür gibt es den EXISTS-Operator, der ist genau für soetwas vorhanden:
Zitat von manfred_h:
SQL-Code:
OR (EXISTS (SELECT *
            FROM RPL$GROUPS
            INNER JOIN RPL$GROUPS_RIGHTS
              ON RPL$GROUPS_RIGHTS.GROUP_NO = RPL$GROUPS.GROUP_NO
            WHERE RPL$GROUPS.GROUP_NO = x.MEMBER_GROUP
              AND RPL$GROUPS_RIGHTS.CAMP_NO = NEW.C_NO))
Wobei ich mir dann einen Alias bei "MEMBER_GROUP" wünschen würde.

Sorry, für die vielen Fragen. Aber diesen Eiertanz hier um die eigentliche Lösung, konnte ich nicht mehr mit ansehen. Fangen wir einfach nochmal an, erkläre dein Problem erstmal ausführlich und so, dass auch jemand, der dein System nicht sehen kann, auch versteht, was du da hast und vor allen Dingen, was du eigentlich genau wie haben möchtest.

Anderen ist das vielleicht alles klar, mir nicht. Falls dir das zu viele Fragen sind, dann ignoriere mich einfach und ich beschäftige mich nicht weiter mit deinem Problem.
  Mit Zitat antworten Zitat