Hank Strobl: SELECT Problem / SQL

Hallo zusammen,

ich hoffe, daß hier auch zum Samstag Abend noch ein paar Datenbank-Cracks rumschwirren und mir etwas unter die Arme greifen können.

Ich habe folgendes Problem:

Eine Liste von Personalnummern ... Ergebnis eines Selects auf eine andere Tabelle .... 100001,100002 usw... soll aufgrund von kriterien weiter eingeschränkt werden (Aktions-Nr, T-Kritierum)

dazu habe ich eine Tabelle, eher eine Abfrage, welche die möglichen Kriterien bereits zusammenholt:

Pers-Nummer | Aktions-Nr | T-Kriterium
---------------------------------------------
1000001     | 2000001    | +
1000001     | 2000002    | +
1000001     | 2000003    | +
1000002     | 2000001    | +
1000002     | 2000002    | +
1000002     | 2000003    | -
1000003     | 2000001    | +
1000003     | 2000002    | -
1000004     | 2000001    | -
1000004     | 2000003    | +
1000005     | 2000001    | -
1000003     | 2000003    | -

klingt soweit auch nicht schwer.

Kompliziert wird das jetzt aber, daß für die Einschränkungen mehrere Aktions-Nr einfließen:  2000001,2000002 beide zusammen mit "+" für das T_Kriterium

Ich hätte jetzt gern nur die Einträge, wo sowohl 2000001 und + als auch 2000002 und + enthalten sind.

Ein Konstrukt à la

WHERE T-Kriterium='+' AND (Aktionsnummer=2000001 AND Aktionsnummer=2000002 ....)

nutzt mir nicht besonders viel. Ich wollte es über den IN Operator versuchen, das scheint aber eher eine ODER-Verknüpfung zu sein. Gibt es dieses IN nicht auch UND-verknüpfend??

Hätte da mal einer ne Idee zu? :-)

Gruß von der Alm, Hank

  1. Hi,

    Hätte da mal einer ne Idee zu? :-)

    Gruß von der Alm, Hank

    gaaanz, gaanz, ganz wichtig koennte das RDB(M)S sein. Welches nutzt Du denn?

    btw - Lies doch mal in der Doku nach, was "Sub-Selects" so moeglich machen.

    Gruss,
    Lude

    1. Hallo,

      ich nutze hier Oracle 9i Personal Edition, das kann
      a) Sub-Selects
      b) kennt den IN Operator

      Aber sub-selects bringen mich an der Stelle auch nicht viel weiter. die benutze ich schon.

      Ich hatte grad die Idee, die Tabelle auf sich selbst zu joinen ... aber da bringt er mir gleich 28 Datensätze ... hmmm ich steh da glaub ich irgendwo auf nem Schlauch.

      Gruß, von der Alm,
      Hank

  2. Nein die in operation ist im prinzip eine umfassendere oder Verknüpfung.
    Du musst wohl mit einer and / or Konsturkion das ganze erreichen.

    Ausserdem ist ein derartige vorgehen, wie du es vorhast sehr schlecht weil es die Performance der Datenbank extrem negativ beeinflusst. Joins sind mit Vorsicht zu geniessen. Recht schnell hat man hier ein riesieges suchergebniss was die Datenbank nieder müllt.

    Für dein Problem ist aber ein join ohnehin de verkehrte Ansatz.

    Grundregel bei SQL Versuche shon mit der ersten Bedingung das suchergebiss auf das min. einzuschränken.

  3. hi,

    Ein Konstrukt à la

    WHERE T-Kriterium='+' AND (Aktionsnummer=2000001 AND Aktionsnummer=2000002 ....)
    nutzt mir nicht besonders viel.

    besonders das was in der klammer steht, Aktionsnummer=2000001 AND Aktionsnummer=2000002, dürfte schwer zu erfüllen sein - aber vielleicht klappt's ja an dem tag, wo ostern und pfingsten zusammenfallen ;-)

    gruss,
    wahsaga