Jump to content

SQL Query erstellen


roga
Direkt zur Lösung Gelöst von roga,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo liebes Forum,

 

seit einiger Zeit beschäftige ich mich mit SQL bzw. möchte es mir selbst beibringen. An einer mir selbst gestellten Aufgabe scheitere ich aber kläglich. Nun suche ich hier in diesem Forum um Hilfe.

 

Mein Problem:

 

ich habe eine Tabelle "tblKunden" und eine Tabelle "tblArtikel". Beide Tabellen sind über eine Beziehungstabelle m:n miteinander verknüpft. Beide Tabellen (Kunden und Artikel) besitzen als Primärkey einen eindeutigen Integerwert. Beide Primärkeys sind in der Beziehungstabelle als Fremdkey festgelegt.

 

Nun wollte ich eine Abfrage machen, von der ich alle gekauften Artikel eines bestimmten Kunden (z.B. K-Nr. 13) erhalte. Das hat auch mit folgender SQL-Abfrage funktioniert:

 

SELECT tblArtikel.artikel_bez, tblArtikel.atikel_nr

FROM tblKunden_Artikel INNER JOIN tblArtikel ON tblKunden_Artikel.artikel_id = tblArtikel.artikel_id

WHERE tblKunden.kunden_nr = 13

 

Eine weitere Abfrage sollte mir all die Artikel liefern, welche ein bestimmter Kunde noch NICHT gekauft hat. Und genau hier scheitere ich, leider :-(

 

Ich möchte als Erbegnis eine Liste mit der Artikel-Bezeichnung und Nummer erhalten, die der Kunden also noch NICHT gekauft hat, doch wie muss eine soche Abfrage aussehen??

 

PS: ich bin schon dabei, mich durch verschiedenste Tutorials betreffend dem Thema SQL durchzuschlagen, nur gefunkt hat's bislang noch nicht so richtig.

Es fehlt mir halt ein "Lehrer" :-)

 

Für gut gemeinte Tipps und Ratschläge bin ich sehr dankbar!

 

Grüsse

ROGA

Link zu diesem Kommentar

Hallo uns willkommen im Forum,

 

hört sich zwar wie eine Übungsaufgabe  an, trotzdem mal ein Denkanstoß:

 

Selektiere nur von tblArtikel (select * from, oder so).

 

Nun brauchst Du noch eine Kopie Deiner Query, in der Du nur tblArtikel.artikel_id selektierst.

 

Im Where-Statement der 1. Quey schreibst Du tblArtikel.artikel_id  not in (...)

 

Die Punkte darfst Du Dir jetzt ausdenken...

Link zu diesem Kommentar

Hallo Zahni,

 

Vielen Dank für den schnellen "Denkanstoss". Hab mich gleich hingesetzt und mich damit beschäftigt. Leider bekomme ich noch nicht das gewüschte Ergebnis.

 

Habe ich Deinen "Denkanstoss" so richtig verstanden?

 

SELECT *

FROM tblArtikel

WHERE tblArtikel.Artkel_id not in

(SELECT tblArtikel.Artikel_id FROM tblArtikel)

 

Diese Abfrage liefert mir zwar keinen Fehler aber auch keine Daten :-(

 

Was mich hier etwas verwirrt ist, dass bei Deinem Ansatz keine Verbindung zur Beziehungstabelle gemacht wird. Wie kann ich dann so die Abfrage für einen bestimmten Kunden machen, so wie ich es oben geschildert habe?

 

Stehe ich jetzt total auf dem Schlauch oder gib's noch Hoffnung für mich?

 

Grüsse

ROGA

Link zu diesem Kommentar
  • Beste Lösung

Hallo Cybquest,

 

Wow!!! Dein Hinweis scheint mich wirklich weiter gebracht zu haben, vielen, vielen Dank!!!!!!

 

Euch beiden nochmals vielen Dank!!!

 

Bis zu meinem nächsten Problem :-) Es wird sicher nicht die letzte Frage sein, die ich hier platzieren werde. Aber dank der kompetenten Unterstützung hier in diesem Forum durch euch, macht es wirklich wieder Spass!!!

 

Ich bin Happyyyyyy ....

 

Grüsse

ROGA

Link zu diesem Kommentar

Hallo,

 

ich bin's nochmals :-) Vielleicht hört mir nochmal jemand zu.

 

Mein Problem ist leider nur zur Hälfte gelöst, wie ich jetzt feststellen musste. Wenn ich die obige SQL-Abfrage direkt in einem Query auf dem Datenbankserver mache, dann funktioniert es eigentlich wie erwartet.

 

SELECT *
FROM tblArtikel
WHERE tblArtikel.artikel_id NOT IN

(
SELECT tblArtikel_1.artikel_id
FROM dbo.tblKunden_Artikel AS tblKunden_Artikel_1 INNER JOIN dbo.tblArtikel AS tblArtikel_1
ON tblKunden_Artikel_1.artikel_id = tblArtikel_1.artikel_id
WHERE tblKunden_Artikel_1.kunden_id=16
)

 

Nun wollte ich ich aber diese Abfrage von meinem Test-Programm aus machen, was so leider nicht mehr funktioniert hat, weil die Kunden-ID nicht statisch auf dem Server eingestellt ist, sondern dynamisch von meinem Test-Programm ausgewählt werden kann (soll).

 

Wie schaffe ich es also, die Abfrage so zu erstellen, dass der Server von meiner Kunden-ID kenntnisse erhält???

 

Jetzt stehe ich wirklich auf dem Schlauch :confused:

 

Hoffe, jemand kann mir nochmals einen Denkanstoss verpassen :p

 

Danke und Grüsse

ROGA

Link zu diesem Kommentar

Pack deine Abfrage in eine Stored Procedure. In der SP erstellst Du dann ebenfalls einen int-Parameter für die KundenID. Die 16 ersetzt Du dann mit der INT-Variablen.

Im SQL Server Management Studio kann der Aufruf dann so aussehen:

 

EXEC DeineSP 16
Und so muss der Aufruf auch aussehen, wenn Du das aus deinem uns unbekannten Programm aus aufrufen möchtest.

 

EDIT: Hier gibt es Futter zum erstellen einer SP:

https://msdn.microsoft.com/de-de/library/ms345415%28v=sql.120%29.aspx

http://www.codeproject.com/Articles/126898/Sql-Server-How-To-Write-a-Stored-Procedure-in-SQL

bearbeitet von Sunny61
Link zu diesem Kommentar

Hallo Sunny61,

 

Vielen Dank! Bin richtig überrascht, wie schnell das hier abgeht :-)

 

Mein "Unbekanntes" Programm ist ein VB.NET Programm. Auch damit bin ich fleissig am üben. :-)

 

Also, das mit der Stored Procedure habe ich von der Theorie her halbwegs auf die Reihe bekommen, muss damit wohl noch einwenig experimentieren. Werde aber vorher das "Futter" noch genüsslich in mich hineinziehen und danach ordentlich verdauen. Hoffe, ich krieg den rest dann alleine auf die Reihe. Werde über meinen Erfolg/Misserfolg weiter berichten.

 

Danke für die Unterstützung!!!

 

Grüsse

ROGA

bearbeitet von roga
Link zu diesem Kommentar

Hier gibt es noch weitere Infos zu dem Thema:

 

http://stackoverflow.com/questions/5991877/execute-a-sql-stored-procedure-and-process-the-results

https://support.microsoft.com/en-us/kb/308049

 

http://www.codeguru.com/columns/vb/using-sql-stored-procedures-with-vb.net.htm

 

Sobald Du ein Query oder eine View mit Parametern füttern möchtest, ist eine SP das Mittel der Wahl. Views würde ich auch nur noch als letztes Mittel sehen, die SPs sind eigentlich immer den Views vorzuziehen.

Link zu diesem Kommentar

Trotzdem sollte es programmiertechnisch zunächst egal sein, ob ich eine Query, View oder SP mit Parametern verwende. Der Rest ist eher eine Frage des Designs. Persönlich  kenne ich mehr Anwendungen, die keine SPs verwenden, sondern zu 98% dynamisches SQL. Mit gewissen Frameworks geht das auch selten anders. 

Aber ich schweife ab.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...