vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

ADO.NET / Datenbanken
SQL Abfrage 
Autor: derdieter
Datum: 06.04.17 11:45

Hallo zusammen,

ich habe folgendes Problem, bei demich nicht weiterkomme.
Ich habe eine Tabelle, in der jeder Lieferant gelistet ist mit den Artikeln die er liefern kann.


Lieferant Artikel
-------------------------
Lieferant A Äpfel
Lieferant A Birnen
Lieferant A Bananen
Lieferant A Zitronen
Lieferant B Äpfel
Lieferant B Bananen
Lieferant B Zitronen
Lieferant C Bananen
Lieferant C Zitronen

Nun möchte ich per Abfrage alle Lieferanten erhalten, die z.B. Äpfel UND Bananen liefern können (Ergebnis also Lieferant A und Lieferant B).

Wie muss dazu die SQL-Abfrage lauten?

Danke für Eure Hilfe.

Grüße
Dieter
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL Abfrage 
Autor: Manfred X
Datum: 06.04.17 11:59

Hallo!

Dieses Forum dient nicht der SQL-Ausbildung.

Ohne Kenntnis des Datenbanksystem, des SQL-Dialekts
und der Datenstrukturen (Tabellen, Typen, Verknüpfungen)
kann man ohnehin keine sinnvolle Auskunft geben.

Eigentlich solltest Du eine Tabelle mit Lieferanten,
eine Tabelle mit Artikeln haben und daraus eine LieferantArtikel-Liste
ableiten, die paarweise die IDs der beiden Tabellen verknüpft.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL Abfrage 
Autor: derdieter
Datum: 06.04.17 12:11

Die Darstellung ist ja auch nur schematisch.

DB ist eine AccessDB.

Ich habe eine Tabelle "Lieferanten":

ID | Lieferant
1 | Lieferant A
2 | Lieferant B
3 | Lieferant C

Und ich habe eine Tabelle "Artikel":

ID | Artikel
1 | Äpfel
2 | Birnen
3 | Bananen
4 | Zitronen

Dann habe ich eine Tabelle LieferantArtikel

ID | LieferantID | ArtikelID
1 | 1 | 1
2 | 1 | 2
3 | 1 | 3
4 | 1 | 4
5 | 2 | 1
6 | 2 | 3
7 | 2 | 4
7 | 3 | 3
7 | 4 | 4

Trotzdem habe ich nun das Problem, aus der Tabelle LieferantArtikel alle Lieferanten zu filtern, die die Artikel 1 UND 3 liefern können.

Beitrag wurde zuletzt am 06.04.17 um 12:20:11 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL Abfrage 
Autor: Manfred X
Datum: 06.04.17 12:38

Die Abfrage der IDs funktioniert über eine Where-Klausel.
Die Kombination der IDs mit den Basistabellen kann durch eine Join-Verknüpfung erfolgen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL Abfrage 
Autor: derdieter
Datum: 06.04.17 14:00

Hi,

das ist mir klar. Ich bekomme die Tabellen auch entsprechend verknüpft. Das Problem ist nur, dass ich immer nur die Lieferanten bekomme, die entweder Äpfel ODER Birnen liefern können. Ich benötige aber nur diejenigen, die beides liefern können. Daran scheitere ich.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL Abfrage 
Autor: Manfred X
Datum: 06.04.17 18:01

Eventuell zwei Where-Klauseln (für die beiden Produkte) durch die
jeweils die Lieferanten-ID ermittelt wird (Tabelle LieferantenArtikel)
wobei die beiden Klauseln durch ein Inner Join verknüpft werden
(= nur Lieferanten, die beiden Where-Bedingungen genügen).
Darüber läßt sich durch ein weiteres INNER JOIN mit der Lieferantentabelle
der Lieferantenname ermitteln.

Das Ganze sieht als SQL ungefähr so aus:
 
"select Lieferant from Lieferanten INNER JOIN " & _
     "(select X.L_ID from " & _
         "(Select L_ID from LieferantenArtikel Where A_ID = 1) AS X Inner JOIN 
          (Select L_ID from LieferantenArtikel Where A_ID = 2) AS Y ON X.L_ID = _
            Y.L_ID)" & _
     "AS Z ON Lieferanten.L_ID = Z.L_ID"
L_ID ist die ID der Lieferanten - Fremdschlüssel in LieferantenArtikel-Tabelle
A_ID ist die ID der Artikel - Fremdschlüssel in der LieferantenArtikel-Tabelle
X: temp. Tabelle mit Lieferanten-ID, die Artikel 1 liefern
Y: temp. Tabelle mit Lieferanten-ID, die Artikel 2 liefern
(Die Artikel-ID wird in der Praxis als SQL-Parameter definiert.)
Z: temp.Tabelle mit LieferantenID aus der per Inner Join die Namen der Lieferanten
(Spalte: Lieferant) ermittelt werden.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel