Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Hilfe bei SQL Abfrage

Dieses Thema im Forum "Microsoft Access" wurde erstellt von HerrFrie, 5 Mai 2015.

  1. HerrFrie

    HerrFrie Benutzer

    Hallo zusammen,

    habe ein Problem mit einer Abfrage.
    Im Grunde geht es darum. Ich habe eine Tabelle tbl_Historie, in der ich alle Artikelbewegungen abspeichere.

    tbl_Historie Tabelle
    ID der Autowert der Tabelle
    Art_ID die ID des Artikel
    Sta_ID die ID des Status/was gemacht wurde

    Sta_ID = 21 --> Artikel angelegt
    Sta_ID = 23 --> Artikel abgebucht
    Sta_ID = 25 --> Artikelbestand korrigiert
    ...und so weiter.

    In der Tabelle haben alle Artikel einmal die Sta_ID = 21, aber es kommen mehrmals Sta_ID = 23 /25 /... vor.

    Jetzt brauche ich eine Abfrage, in der mir nur Art_IDs angezeigt werden, die in dieser Tabelle keinen Eintrag mit Sta_ID = 23 oder 25 haben. Auf einem anderen Forum habe ich auch schon diese Frage gestellt, aber leider hat da niemand eine passende Idee.
    Habt ihr evtl. eine Lösung ?

    Danke und Gruß
    HerrFrie
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Also, Du hast:

    Code:
    test=*# select * from herrfrie;
     id | artikel | status
    ----+---------+--------
      8 |  1 |  21
      9 |  1 |  23
     10 |  2 |  21
     11 |  3 |  21
     12 |  4 |  21
     13 |  4 |  23
     14 |  4 |  25
    (7 rows)
    
    und suchst:

    Code:
    test=*# select artikel from herrfrie except select artikel from herrfrie where status in (23, 25);
     artikel
    ---------
      3
      2
    (2 rows)
    
    Oder?
     
  3. HerrFrie

    HerrFrie Benutzer

    Korrekt !
     
    akretschmer gefällt das.
  4. HerrFrie

    HerrFrie Benutzer

    ...allerdings funktioniert diese Abfrage so nicht.

    SELECT tbl_Artikel.Art_ID FROM tbl_Artikel EXCEPT (SELECT tbl_Test.Art_ID FROM tbl_Test WHERE tbl_Test.Sta_ID in (23,25))

    Das ganze mache ich übrigends in Visual Basic 2010, das sollte aber mit dem SQL String egal sein. Es ist eine .mdb Datenbank von Access.

    Habe ich das evtl. falsch aus deinem Vorschlag übertragen ?
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Ich liebe solch konkreten Fehlermeldungen. Wirf das mal bei Google ein, also google mal nach "funktioniert diese Abfrage so nicht".

    Dem String selber ist das ganz sicher egal, ja.

    Aber vielleicht nicht dem DB-System, was Du verwendest. SELECT, FROM, EXCEPT und WHERE sind zwar Bestandteil der seit 20-30 Jahren alten SQL-Spezifikation, aber es gibt auch heute noch Software, die das nicht kann. MySQL ist eine weit verbreitete fehlerhaft umgesetzte Realisierung des SQL-Standards. Access möglicherweise auch. Würde mich nicht wundern, ist ja von Microsoft.
     
  6. HerrFrie

    HerrFrie Benutzer

    Sorry :rolleyes:,

    die Fehlermeldung lautet : OleDbException wurde nicht behandelt.
    Fehler E_FAIL(0x80004005 in IErrorInfo.GetDescription.

    Ist aber eine VB Fehlermeldung.
    Ich habe den Befehl mal vereinfacht abgeschickt und der Fehler bleibt.

    SELECT * FROM tbl_Artikel EXCEPT SELECT * FROM tbl_Test

    Demnach würde ich auch sagen, das VB oder Access mit dem EXCEPT nicht klarkommt. Werde mal googlen.
     
  7. akretschmer

    akretschmer Datenbank-Guru

    Deswegen auch, aber nicht nur, mache ich ich um solche Software einen großen Bogen.
     
  8. HerrFrie

    HerrFrie Benutzer

    Ist halt auf der Arbeit, da habe ich keine großartigen Möglichkeiten.
    Ist eine Artikelverwaltung wo jetzt gefragt wurde, ob man diese Auswertung machen könnte. Dann haben sie Pech gehabt...
     
  9. Distrilec

    Distrilec Datenbank-Guru

    Dann versuch einfach mal ein "Minus"... Ist meistens ein equivalenter Ersatz...
     
  10. HerrFrie

    HerrFrie Benutzer

    Syntax Error ...

    Hatte es auch schon mit WHERE NOT EXISTS probiert, funktioniert aber leider auch nicht.
     
  11. akretschmer

    akretschmer Datenbank-Guru

  12. HerrFrie

    HerrFrie Benutzer

    Ich glaube das sieht gut aus !!!

    Kann das im Moment nur mit der Original Datenbank testen und da sind 3700 Artikel drinnen. Hier fällt es mir gerade schwer zu 100% zu berichten, ob das Ergebnis richtig ist.
    Aber zumindest wird mir nicht gar nichts oder alles angezeigt, sonder nur knapp 2000 Teile. Das könnte hinhauen. Wenn ich nachher zu hause bin, werde ich das mit meiner kleinen Test-Datenbank probieren.
    Bei 10 Artikeln habe ich dann eine gute Übersicht.
    Vielen Dank schon einmal für die Hilfe, werde noch berichten !

    Gruß
    HerrFrie
     
  13. HerrFrie

    HerrFrie Benutzer

    So,

    habe es getestet und es funktioniert wunderbar ! Vielen Dank für die Hilfe und den richtigen Tipp !

    Mit meinen JOINs für die Auflösung des Herstellers, Lieferanten und Lagerorten sieht der String so aus:

    SELECT * FROM (((tbl_Artikel LEFT OUTER JOIN tbl_Hersteller ON tbl_Artikel.Her_ID = tbl_Hersteller.Her_ID ) LEFT OUTER JOIN tbl_Lieferant ON tbl_Artikel.Lie_ID = tbl_Lieferant.Lie_ID ) LEFT OUTER JOIN tbl_Lagerort ON tbl_Artikel.Lag_ID = tbl_Lagerort.Lag_ID ) WHERE tbl_Artikel.Art_ID NOT IN (SELECT tbl_Historie.Art_ID FROM tbl_Historie WHERE tbl_Historie.Sta_ID in (23,25))
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden