Startseite
Stellenmarkt
Downloads
Kontakt
  Community Center:   Forum  |  Gruppen  |  Chat  |

Zurück   Forum Fachinformatiker.de > Fachliches > Datenbanken



Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 27.01.2010, 09:19   #1
Reg.-Benutzer
 
Reg.-Datum: 09.01.2008
Standard Eigentlich einfache SQL Abfrage

Hallo,

irgendwie habe ich ein Brett vorm Kopp und bräuchte mal Hilfe.

Ich habe drei Tabellen,

Tabelle Kunden:
ID Name
1 Müller
2 Meier
3 Schmidt

Tabelle Produkte
ID Bezeichnung
1 Fenster
2 Haustür
3 Markise

und Tabelle KundeHatProdukte (Beziehungstabelle)
IDKunde IDProdukt
1 1
1 3
3 1
2 2


So jetzt bräuchte ich alle Kunden, die Fenster UND Markisen beziehen.
Select Name, Bezeichnung
From Kunden, KundeHatProdukte, Produkte
Where Kunden.ID=KundeHatProdukte.IDKunde
and KundeHatProdukte.IDProdukt= Produkte.ID
AND (Bezeichnung ='Fenster or Bezeichnung='Markise');

Mein Problem ist das ich hier nur eine Oder Verknüpfung bekommen,
also alle Kunden die Fenster ODER Markisen beziehen, und nicht Kunden die genau beides beziehen.

Als Ergebnis soll also nur Kunde Müller rauskommen.

Vll kann mir jemand helfen.
msc84 ist offline   Mit Zitat antworten
Alt 27.01.2010, 09:45   #2
Reg.-Benutzer
 
Reg.-Datum: 06.11.2009
Ort: Elangen
Standard

Hi

Ich beschäftige mich grade selber intensiv mit sowas - also versuch ich mal zu helfen

Wenns nicht funktioniert bitte nicht haun

Ich denke aber wenn du die letzte Zeile änderst, und dann abfragst:

Select Name, Bezeichnung
From Kunden, KundeHatProdukte, Produkte
Where Kunden.ID=KundeHatProdukte.IDKunde
and KundeHatProdukte.IDProdukt= Produkte.ID
and Produkte.ID=1
and Produkte.ID=3;

müsste funktionieren...
Daij ist offline   Mit Zitat antworten
Alt 27.01.2010, 09:50   #3
Reg.-Benutzer
 
Reg.-Datum: 09.01.2008
Standard

Also geschlagen wirst du nicht,
aber es funktioniert aucht nicht!

Ein Feld kann ja nicht gleichzeitig 1 und 3 sein. Wenn ich das richtig verstehe.
Ich denke das man hier mit Subqueries arbeiten muss.

Trotzdem danke.

Geändert von msc84 (27.01.2010 um 09:54 Uhr)
msc84 ist offline   Mit Zitat antworten
Alt 27.01.2010, 09:59   #4
Reg.-Benutzer
 
Benutzerbild von kingofbrain
 
Reg.-Datum: 23.09.2001
Ort: Landsberg a. Lech
Standard

SQL ist zwar nicht so mein Fachgebiet, und das Statement ist auch nicht getestet, aber vielleicht könnte es so oder so ähnlich gehen:

Code:
select k.*
from Kunden k, Produkte p, KundeHatProdukte kxp
where k.ID = kxp.IDKunde
and p.id = kxp.IDProdukt
and exists (
	select ikxp.IDKunde 
	from KundeHatProdukte ikxp 
	where ikxp.IDProdukt = 1
	and ikxp.IDKunde = k.ID)
and exists (
	select ikxp.IDKunde 
	from KundeHatProdukte ikxp 
	where ikxp.IDProdukt = 3
	and ikxp.IDKunde = k.ID)
Ich weiß allerdings nicht, ob Du innerhalb des inner selects auf "k.ID" Zugriff hast.

Viel Erfolg!

Peter
__________________
DON'T PANIC.
kingofbrain ist offline   Mit Zitat antworten
Alt 27.01.2010, 10:06   #5
Reg.-Benutzer
 
Reg.-Datum: 05.01.2008
Ort: Leipzig
Standard

Zitat:
Tabelle Produkte
ID Bezeichnung
was ist denn die ID hier? eine ID, so wie in der Beziehungstabelle oder ein Text zur Beschreibung des Produkts?
__________________
Dieser Texte kann Spuren von Ironie, Sarkasmus, Denkanstössen und freier Meinungsäusserung enthalten. Es wird keine Garantie auf Textverständnis gewährleistet. Bei Risiken und Nebenwirkungen lesen Sie bitte zwischen den Zeilen, oder denken Sie einfach nicht weiter darüber nach.
MartinSt ist offline   Mit Zitat antworten
Alt 27.01.2010, 10:16   #6
Reg.-Benutzer
 
Reg.-Datum: 09.01.2008
Standard

Zitat:
Zitat von kingofbrain Beitrag anzeigen
SQL ist zwar nicht so mein Fachgebiet, und das Statement ist auch nicht getestet, aber vielleicht könnte es so oder so ähnlich gehen:

Code:
select k.*
from Kunden k, Produkte p, KundeHatProdukte kxp
where k.ID = kxp.IDKunde
and p.id = kxp.IDProdukt
and exists (
	select ikxp.IDKunde 
	from KundeHatProdukte ikxp 
	where ikxp.IDProdukt = 1
	and ikxp.IDKunde = k.ID)
and exists (
	select ikxp.IDKunde 
	from KundeHatProdukte ikxp 
	where ikxp.IDProdukt = 3
	and ikxp.IDKunde = k.ID)
Ich weiß allerdings nicht, ob Du innerhalb des inner selects auf "k.ID" Zugriff hast.

Viel Erfolg!

Peter
Cool!

Das funktioniert.
Daraus kann ich mir mein Statement basteln.

Vielen Dank!
msc84 ist offline   Mit Zitat antworten
Alt 29.01.2010, 10:35   #7
Reg.-Benutzer
 
Reg.-Datum: 06.11.2009
Ort: Elangen
Standard

Auch wenn ich mich damit vielleicht bisschen doof hinstelle - kann mir jemand erklären wieso der von mir gepostete Lösungsansatz nicht funktioniert?

Ich kann darin keinen logischen Fehler finden...

an sich ist das Statement doch richtig und müsste funktionieren oder?
Daij ist offline   Mit Zitat antworten
Alt 29.01.2010, 10:57   #8
Reg.-Benutzer
 
Benutzerbild von kingofbrain
 
Reg.-Datum: 23.09.2001
Ort: Landsberg a. Lech
Standard

Code:
Select Name, Bezeichnung
From Kunden, KundeHatProdukte, Produkte
Where Kunden.ID=KundeHatProdukte.IDKunde
and KundeHatProdukte.IDProdukt= Produkte.ID
and Produkte.ID=1
and Produkte.ID=3;
Du suchst Kunden, bei denen das selbe verknüpfte Produkt die ID 1 *und* die ID 3 hat. Das ist nicht möglich. Evtl. hätte man die KundeHatProdukte und die Produkte Relation noch ein zweites Mal mit aufnehmen können und dann nach "p1.ID = 1 and p2.ID = 3" einschränken.

Peter
__________________
DON'T PANIC.
kingofbrain ist offline   Mit Zitat antworten
Alt 29.01.2010, 11:09   #9
Reg.-Benutzer
 
Reg.-Datum: 06.11.2009
Ort: Elangen
Standard

ah okay, eigentlich logisch ja

hab das nur nicht als problem gesehen *g*

macht aber Sinn.

Danke dir
Daij ist offline   Mit Zitat antworten
Alt 29.01.2010, 11:45   #10
Reg.-Benutzer
 
Benutzerbild von LadyPreis
 
Reg.-Datum: 02.07.2008
Ort: Großraum FFM
Standard

sollte eigentlich auch funktionieren:

Code:
Select Name, Bezeichnung
From Kunden, KundeHatProdukte, Produkte
Where Kunden.ID=KundeHatProdukte.IDKunde
and KundeHatProdukte.IDProdukt= Produkte.ID
and Produkte.ID=1
INTERSECT
Select Name, Bezeichnung
From Kunden, KundeHatProdukte, Produkte
Where Kunden.ID=KundeHatProdukte.IDKunde
and KundeHatProdukte.IDProdukt= Produkte.ID
and Produkte.ID=3
__________________
Verhandle nie mit Idioten. Sie ziehen dich auf ihr Niveau und schlagen dich mit Erfahrung

Zitat:
Zitat von Chief Wiggum Beitrag anzeigen
Klopp das Thema in die Tonne, wirf es weg, stopf alle Ausdrucke in den Aktenshredder, spül es im Klo runter, bring es zum Wertstoffhof der Stadtreinigung.

Geändert von LadyPreis (29.01.2010 um 11:48 Uhr)
LadyPreis ist offline   Mit Zitat antworten
Antwort

Lesezeichen
Zurück   Forum Fachinformatiker.de > Fachliches > Datenbanken

Themen-Optionen
Ansicht


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Dynamische MySQL Abfrage über PHP King Phoenix Skript- und Webserverprogrammierung 4 31.12.2009 17:50
Anzeigen aller Werte einer Abfrage JAF Datenbanken 3 28.09.2009 23:02
Abfrage Problem Unrealfighter Datenbanken 3 27.05.2007 16:39
Ganz einfache Frage / Abfrage allthatsleft Skript- und Webserverprogrammierung 2 02.03.2004 09:51
[SQL] Abfrage in Abfrage ? 2daBeat Datenbanken 4 31.10.2003 10:18


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:01 Uhr.