Wie lautet der SQL-Befehl?

Hallo,
ich bräuchte mal den Befehl für folgenden Sachverhalt:

Kunde „Meier“ möchte wissen was er bis jetzt alles in unserem Online-Shop gekauft hat.
Ich habe 4 Tabellen: Tabelle Kunde, Tabelle Artikel, Tabelle Bestellung und Tabelle Bestellposten.

Dachte mir das so:

SELECT [ALL] Artikelbez, Hersteller, ArtikelNr, Preis, KundenNr
FROM Artikel, Bestellung
WHERE KundenNr = ‚23558‘

Also der Kunde soll nur die angegebenen Felder von der Tabelle Artikel zu sehen bekommen und die KundenNr ist in der Tabelle Bestellung drin.

Würde das so funktionieren?Oder soll ich alle Felder der Tabellen mal posten?

MfG Sabine L.

Hallo Sabine,

Du musst noch eine JOIN der beteiligten Tabellen machen.
D.h. diese im Where verknüpfen.

Kannst Du mal die Tabellen posten, dann kann ich Dir gleich ein Beispiel machen.

Gruss, Simon

Also okay,hier meine Tabellen:

Tabelle Kunde:
KundenNr(PrimaryKey)
Nachname
Vorname
Firma
Straße
HausNr
PLZ
Ort
TelNr
Handy
Fax
KontoNr
BLZ
Institut
EMail
Nutzername
Passwort

Tabelle Artikel:
ArtikelNummer (PrimaryKey)
Artikelbez
Hersteller
ArtikelNr
EPreis

Tabelle Bestellung:
BestellungNr (PrimaryKey)
KundenNr (SecondaryKey)
Datum

Tabelle Bestellposten:
PostenNr (PrimaryKey)
BestellungNr (SecondaryKey)
ArtikelNr (SecondaryKey)
EPreis
Rabatt
Menge
Gesamtpreis

So, hoffe die Beziehungen passen?!

MfG Sabine L.

Du musst noch eine JOIN der beteiligten Tabellen machen.
D.h. diese im Where verknüpfen.

Kannst Du mal die Tabellen posten, dann kann ich Dir gleich
ein Beispiel machen.

Gruss, Simon

HI!
Ich würde mal sagen so:

SELECT * FROM Kunde LEFT JOIN Bestellung (ON Kunde.KundenNr = Bestellung.KundenNr) WHERE Kunde.Nachname = Meier ORDER BY Bestellung.Datum ASC;

*ungetestet*
Bei der WHERE-Klausel würde ich allerdings dann nicht nach dem Namen sondern auch nach der Kundennummer machen. Je nachdem was du halt als Parameter hast, wäre das wohl sinnvoller.

Gruß
Johannes

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Also so ja?:

SELECT * FROM Kunde LEFT JOIN Bestellung (ON Kunde.KundenNr =
Bestellung.KundenNr) WHERE Kunde.KundenNr = 12345 ORDER BY
Bestellung.Datum ASC;

ABER mit Select * wird doch alles ausgewählt oder nicht?! Und die KundenNr muss nicht in Hochkommas? Weil du einfach Meier geschrieben hast…

MfG Sabine L.

*ungetestet*
Bei der WHERE-Klausel würde ich allerdings dann nicht nach dem
Namen sondern auch nach der Kundennummer machen. Je nachdem
was du halt als Parameter hast, wäre das wohl sinnvoller.

oder so…
Oder wie siehts so aus:

SELECT [ALL] Artikel.Artikelbez, Artikel.Hersteller, Artikel.ArtikelNr, Artikel.EPreis, Bestellung.KundenNr
FROM Artikel LEFT JOIN Bestellung (ON Kunde.KundenNr =
Bestellung.KundenNr)
WHERE Kunde.KundenNr = 12345
ORDER BY Bestellung.Datum ASC;

???

MfG Sabine L.

Juhu?
Also hab das jetzt mal so in Access ausprobiert:

SELECT *
FROM Kunde LEFT JOIN Bestellung ON Kunde.KundenNr = Bestellung.KundenNr
WHERE Kunde.KundenNr = 23558;

das funzt in Access auch schonmal so…

NUR ich bekomm ja jetzt alle Felder der Tabelle Kunde ausgegeben, möchte aber nur die Artikelbezeichnung, Hersteller, Artikelnummer und EPreis der Tabelle Artikel haben! Wie mach ich das jetzt?

MfG Sabine L.

Also hab das jetzt mal so in Access ausprobiert:

SELECT *
FROM Kunde LEFT JOIN Bestellung ON Kunde.KundenNr =
Bestellung.KundenNr
WHERE Kunde.KundenNr = 23558;

das funzt in Access auch schonmal so…

Fein.

NUR ich bekomm ja jetzt alle Felder der Tabelle Kunde
ausgegeben, möchte aber nur die Artikelbezeichnung,
Hersteller, Artikelnummer und EPreis der Tabelle Artikel

Der Tabelle Bestellung, hoffe ich mal; von der Tabelle Artikel sehe ich nix …

haben! Wie mach ich das jetzt?

So :

SELECT Kunde.KundenNr, Bestellung.Artikelbezeichnung, Bestellung.Hersteller, usw.usf., knätterätää ich bin da jetzt zu faul zu …
FROM Kunde LEFT JOIN Bestellung ON Kunde.KundenNr =
Bestellung.KundenNr
WHERE Kunde.KundenNr = 23558;

Gruß kw

ähm…

SELECT *
FROM Kunde LEFT JOIN Bestellung ON Kunde.KundenNr =
Bestellung.KundenNr
WHERE Kunde.KundenNr = 23558;

das funzt in Access auch schonmal so…

Fein.

NUR ich bekomm ja jetzt alle Felder der Tabelle Kunde
ausgegeben, möchte aber nur die Artikelbezeichnung,
Hersteller, Artikelnummer und EPreis der Tabelle Artikel

Der Tabelle Bestellung, hoffe ich mal; von der Tabelle Artikel
sehe ich nix …

Nee, eben nicht, meine Tabelle Artikel…wie lautet dann die Abfrage? geht da LEFT JOIN noch? nee oder…is ja nur für zwei Tabellen ne…

MfG Sabine L.

folgendes sollte reichen:

select from kunde, bestellung, bestellpos, artikel
where kunde.kdnr=bestellung.kdnr and bestellung.bestnr=bestellpos.bestnr
and bestellpos.artnr=artikel.artnr;

und berechnet:

select kunde.kdnr,kunde.name,artiel.artnr,sum(menge) from kunde, bestellung, bestellpos, artikel
where kunde.kdnr=bestellung.kdnr and bestellung.bestnr=bestellpos.bestnr
and bestellpos.artnr=artikel.artnr
group by kunde.kdnr,kunde.name,artiel.artnr
order by kunde.kdnr;

Viel Spass damit!

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hm, verstehe grade nicht so was das Problem ist. Eigentlich dürftest du jetzt die entsprechenden Einträge bekommen. Natürlich kannst du - wie schon mein Vorredner erwähnt hat - anstatt allen Einträgen (*) auch nur bestimmte Spalten auswählen.

SELECT Artikelbezeichnung, Hersteller, Artikelnummer, EPreis
FROM Kunde LEFT JOIN Bestellung ON (Kunde.KundenNr = Bestellung.KundenNr)
WHERE Kunde.KundenNr = ‚23558‘;

Also müsste eigentlich gehen…
Schau dir zu diesem Thema mal noch folgende Seite an:
http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/cha…

Gruß
Johannes

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]