Announcement

Collapse
No announcement yet.

Was ist denn hier falsch??

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Was ist denn hier falsch??

    Hallo,<br>
    was kann denn an dieser SQL-Anweisung falsch sein??<br>
    delete from r_tesybd d where (d.kundennr = k.kundennr) and (d.vnr = k.vnr) and (d.nnr = k.nnr) in (select k.kundennr, k.vnr, k.nnr from r_tesybk k where k.auftreinggkv < "01-01-2000")<br>

    Es sollen alle Datensätze in der Tabelle r_tesybd gelöscht werden, die in der Tabelle r_tesybk im Feld auftreinggkv ein älteres Datum als 01.01.2000 haben. <br> <br>
    Wenn einer den Fehler erkennt, dann noch eins:<br>
    Anschliessend sollen aber auch diese Datensätze aus der Tabelle ´r_tesybk gelöscht werden.<br>
    Helmut

  • #2
    Hi,

    Schöne Denksportaufgabe, aber die Angabe einer Fehlermeldung/Fehlverhaltens in welcher Umgebung wäre doch recht erquicklich. Beim Überfliegen des Informationsbrockens meine ich k.kundennummer ist inkorrekt referenziert.

    Gruß
    Gesin

    Comment


    • #3
      > (d.nnr = k.nnr) in (select k.kundennr

      Die Bedingung ist irgwnwie komisch. Was soll denn in (select feld1, feld2, feld3 .. ) drin sein. Und meist geht da nur ein Feld. Was ist es denn für eine Datenbank, das SQL kompatibel ist, ist ein sich hartnäckig haltendes Gerücht von Marktingabteilungen

      Comment


      • #4
        Da sind ein paar Syntaxtische Fehler:<br><br>
        1. bei einem "WHERE wert in (select ...)" darf die Tabelle des Select nur einen Wert enthalten. Ist ja irgendwie auch logisch weil der wert ja mit dem Ergebniss des Select verglichen wird und der wert hat auch nicht mehrere Dimensionen. Korrekt wäre sowas: <b> WHERE wert IN (SELECT vwert FROM tabelle)</b><br><br>
        2. eine WHERE-Klausel kann immer nur eine Bedingung vergleichen also entweder <b> WHERE (wert = wert1) and (wert2 = wert3)</b> oder <b> WHERE (wert1 = wert2) and (wert in (select...))</b> aber NICHT sowas wie <b> (wert1 = wert2) in (select...)</b><br><br>
        Deinen Fall würde ich in etwa so lösen (Das größte Problem ist der zusammengesetzte Schlüssel aus Kundennr, vnr, nnr):<br><br>
        delete from r_tesybd d
        where substr(substr(char(d.kundennr, 10), char(d.vnr, 10)), char(d.nnr, 10)) in <br>
        (select substr(substr(char(k.kundennr, 10), char(k.vnr, 10)), char(k.nnr, 10))<br>
        from r_tesybk k where k.auftreinggkv < "01-01-2000")<br><br>
        char (Nummerischen Wert in Character umwandeln) und substr (zwei Strings verbinden) sind AS/400 SQL spezifische Functionen die wird es aber auch für "normales" SQL geben. Zur Erklärung, weil ich mit IN nur einen Wert vergleichen kann setzte ich die drei Schlüssel zu einem zusammen.<br><br>Ich hoffe ich konnte Dir helfen CU Fran

        Comment

        Working...
        X