Hilfe bei SQL Abfrage

HerrFrie

Benutzer
Beiträge
8
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
 
Werbung:
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.

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?
 
...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 ?
 
...allerdings funktioniert diese Abfrage so nicht.

Ich liebe solch konkreten Fehlermeldungen. Wirf das mal bei Google ein, also google mal nach "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.

Dem String selber ist das ganz sicher egal, ja.

Es ist eine .mdb Datenbank von Access.

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

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.
 
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.
 
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...
 
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
 
Werbung:
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))
 
Zurück
Oben