Guten Tag,
ich hoffe ihr könnt mir helfen, da ich mit Abfragen mehrere Tabellen noch Probleme habe.
Ich habe folgende Tabellen:
1. Personen Tabelle mit Feldern:
ID,Name,Strasse,Ort...
2. Tabelle mit Produkt:
ID,Personen_ID,Name,Version,Anzahl
Inhalt z.B.
Personen:
1,Müller,Alfredweg 2,48912 Berlin
2,Meyer,Musterstr. 12,48916 Berlin
Produkte:
1,2,Windows,98,2
2,2,Windows,XP,5
3,2,Windows,XP,10
4,2,Windows,Vista,2
5,1,Windows,XP,1
6,1,Windows XP,2
Ich erstelle eine Übersichtsliste, in der alle Personen gelistet werden:
SELECT
Personen.ID,
Personen.Name,
Personen.Ort,
FROM Personen,Produkte
Where
Personen.ID=Produkte.Personen_ID
GROUP BY Personen.ID order by Personen.Name
1. Nun meine erste Frage:
Ich möchte in meiner Ansicht neben den Kundendaten in der jeweiligen Zeile auch mit Kürzeln anzeigen lassen, welche Produkte der jeweilige Kunde hat.
Also z.B.
Müller 48912 Berlin XP
Meyer 48916 Berlin 98 XP Vista
Bisher rufe ich für jede Zeile separat die Tabelle Produkte auf und lese die einzelnen Zeilen, um die Produkte auszulesen.
Das dauert natürlich entsprechend lange.
Wie kann ich direkt in der Select Abfrage die Daten so abfragen, dass ich meine Person nur einmal ausgeworfen bekomme, die Produkte dazu hintereinander in Feldern?
2. Filtern
Ich Filter in der Abfrage auch nach Produkten. Ich frage z.B. ab, welche Person Windows XP hat:
SELECT
Personen.ID,
Personen.Name,
Personen.Ort,
FROM Personen,Produkte
Where
Personen.ID=Produkte.Personen_ID
and Produkte.Version='XP'
GROUP BY Personen.ID order by Personen.Name
Soweit so gut.
Nun möchte ich aber auch abfragen, welche Person hat XP und noch kein Vista. Dies klappt so ja nicht, da ich ja nicht abfragen kann:
and Produkte.Version='XP' and Produkte.Version<>'Vista'
Das trifft ja immer zu, da die jeweilige Zeile aus Produkt mit XP ja logischerweise kein Vista sein kann.
3. Zählen und Filern
Zudem möchte ich abfragen, welche Person hat z.B. mehr als 10 Windows XP Lizenzen:
SELECT
Personen.ID,
Personen.Name,
Personen.Ort,
FROM Personen,Produkte
Where
Personen.ID=Produkte.Personen_ID
and Produkte.Version='XP' and Produkte.Anzahl>'10'
GROUP BY Personen.ID order by Personen.Name
Das Ergebnis stimmt nicht, da es mehrere Zeilen mit dem Produkt XP für die Person gibt. Die Anzahl müßte addiert werden. Wie bringe ich das noch mit unter?
Es sind viele Fragen, ich hoffe aber dass mir jemand einen Lösungsansatz geben kann.
Vielen Dank
Richard
ich hoffe ihr könnt mir helfen, da ich mit Abfragen mehrere Tabellen noch Probleme habe.
Ich habe folgende Tabellen:
1. Personen Tabelle mit Feldern:
ID,Name,Strasse,Ort...
2. Tabelle mit Produkt:
ID,Personen_ID,Name,Version,Anzahl
Inhalt z.B.
Personen:
1,Müller,Alfredweg 2,48912 Berlin
2,Meyer,Musterstr. 12,48916 Berlin
Produkte:
1,2,Windows,98,2
2,2,Windows,XP,5
3,2,Windows,XP,10
4,2,Windows,Vista,2
5,1,Windows,XP,1
6,1,Windows XP,2
Ich erstelle eine Übersichtsliste, in der alle Personen gelistet werden:
SELECT
Personen.ID,
Personen.Name,
Personen.Ort,
FROM Personen,Produkte
Where
Personen.ID=Produkte.Personen_ID
GROUP BY Personen.ID order by Personen.Name
1. Nun meine erste Frage:
Ich möchte in meiner Ansicht neben den Kundendaten in der jeweiligen Zeile auch mit Kürzeln anzeigen lassen, welche Produkte der jeweilige Kunde hat.
Also z.B.
Müller 48912 Berlin XP
Meyer 48916 Berlin 98 XP Vista
Bisher rufe ich für jede Zeile separat die Tabelle Produkte auf und lese die einzelnen Zeilen, um die Produkte auszulesen.
Das dauert natürlich entsprechend lange.
Wie kann ich direkt in der Select Abfrage die Daten so abfragen, dass ich meine Person nur einmal ausgeworfen bekomme, die Produkte dazu hintereinander in Feldern?
2. Filtern
Ich Filter in der Abfrage auch nach Produkten. Ich frage z.B. ab, welche Person Windows XP hat:
SELECT
Personen.ID,
Personen.Name,
Personen.Ort,
FROM Personen,Produkte
Where
Personen.ID=Produkte.Personen_ID
and Produkte.Version='XP'
GROUP BY Personen.ID order by Personen.Name
Soweit so gut.
Nun möchte ich aber auch abfragen, welche Person hat XP und noch kein Vista. Dies klappt so ja nicht, da ich ja nicht abfragen kann:
and Produkte.Version='XP' and Produkte.Version<>'Vista'
Das trifft ja immer zu, da die jeweilige Zeile aus Produkt mit XP ja logischerweise kein Vista sein kann.
3. Zählen und Filern
Zudem möchte ich abfragen, welche Person hat z.B. mehr als 10 Windows XP Lizenzen:
SELECT
Personen.ID,
Personen.Name,
Personen.Ort,
FROM Personen,Produkte
Where
Personen.ID=Produkte.Personen_ID
and Produkte.Version='XP' and Produkte.Anzahl>'10'
GROUP BY Personen.ID order by Personen.Name
Das Ergebnis stimmt nicht, da es mehrere Zeilen mit dem Produkt XP für die Person gibt. Die Anzahl müßte addiert werden. Wie bringe ich das noch mit unter?
Es sind viele Fragen, ich hoffe aber dass mir jemand einen Lösungsansatz geben kann.
Vielen Dank
Richard
Kommentar