SQL Verschachtelte SQL Abfrage

  • Ersteller Ersteller Tomson
  • Erstellt am Erstellt am
Nimm zur Fehleranalyse mal den zweiten INNER JOIN + WHERE raus und guck dir das Ergebnis an. Könnte mit unter eine recht große tabelle werden, aber du siehst dann was genau er macht und was du davon selektieren kannst.

Nur mal so ne Frage am Rande. Ist ein FROM ... AND ... nicht gleichzusetzen mit einem INNER JOIN?
 
Es kommt derselbe Fehler...

BTW: Der Fehler sagt ja was von "doppeldeutigkeit" der RID... wie kann das sein?

Langsam bekomm ich Stresspickel vom SQL :lol:
 
Ok dann liegt es entweder am ersten INNER JOIN (was ich mir nicht vorstellen kann) oder an der Selektion. Hast du es auch mit folgendem versucht.

Code:
SELECT R.RID...
 
Jetzt bekomme ich sogar einen Wert zurück, muss jetzt mal kontrollieren, ob das richtig ist, denn er liefert zwar die richtige ID, allerdings dürfte es das gar nicht xD


EDITED:

So, jetzt klappt zwar die Abfrage, allerdings sind wir kein Stück weiter als am Anfang, da die Abfrage mir so oft die RaumID ausgibt, wie viele Gegenstände im Raum vorhanden sind...

Es ging mir aber mit meiner Abfrage (Daher die Verschachtelung) darum, dass er den Raum nur anzeigt, wenn alle ausgewählten gegenstände vorhanden sind, sonst nicht...:rolleyes:
 
Zuletzt bearbeitet:
Tomson schrieb:
Erstmal schonmal ein danke an alle bisher Beteiligten.

@ Manoki: Ich hab jetzt mal deinen Code genommen, und versucht die "Variablen" mal durch meine Namen auszutauschen...

Code:
SELECT [color=red]R.[/color]rid FROM T_RV_Raum AS R
INNER JOIN T_RV_Rauminhalt AS RI ON R.RID = RI.RID

INNER JOIN T_RV_Attribute AS RA ON RA.AID = RI.AID

WHERE RA.AID IN (1,2,3)

Allerdings bekomme ich immer folgenden Error (Anhang), finde aber den Fehler nicht :( (Sorry, habe noch nicht allzuviel Erfahrung mit Datenbanken und mittlerweile habe ich nen ordentlich Knoten im Hirn :freak:)

habs mal reingeschrieben ... den spaltennamen rid gibts mehrmals, deswegen musst du genau angeben, aus welcher tabelle er den nehmen soll.

diese abfrage gibt raumids, wenn mindestens eine attributid übereinstimmt
 
Danke Manoki, so bekomme ich jetzt, wie schon gesagt, wirklich die ID's zurück... Allerdings so oft, wieviele der gesuchten Gegenstände sich im Raum befinden... Ziel meiner Suche war es allerdings, dass die ID nur ausgegeben werden soll, wenn wirklich alle der gesuchten gegenstände im Raum sind...

(Ahh is das kompliziert zu beschreiben ^^ )
 
Code:
... GROUP BY R.rid

Hast ja nur eine Spalte
 
Code:
SELECT R.RID FROM T_RV_Raum AS R
Where R.RID IN (
	SELECT RI.RID
	FROM T_RV_Rauminhalt AS RI
	WHERE RI.AID = 1
)
AND R.RID IN (
	SELECT RI.RID
	FROM T_RV_Rauminhalt AS RI
	WHERE RI.AID = 2
)
AND R.RID IN (
	SELECT RI.RID
	FROM T_RV_Rauminhalt AS RI
	WHERE RI.AID = 3
)

meinst du so?
 
Meinst du nicht, dass meine Variante da einfacher ist? Oder mache ich grad nen Denkfehler?
 
ja, so wie ich das verstanden habe, will er x attribute vorgeben und sucht dann räume, die alle attribute erfüllen (AND verknüpfung nicht OR!).
dabei ist die relation raum - attribut eine m zu n.

mit GROUP BY kannst du zwar die sortierung bestimmen, aber nur, wenn du einen arithmetischen operator (like SUM) im select stehen hast...
 
Richtig Manoki ;)

Danke für den Tipp, werde ihn dann Montag mal probieren, habe mir gerade mein Visual Studio abgeshcossen und die Arbeit der letzten Stunde ist futsch und jetzt bin ich erstmal zu "depri" um wieterzumachen :lol:

Aber das was du zuletzt geschrieben hattest sah gut aus, werde ich aufjedenfall am Montag probieren
 
Einen ganz herzlichen Dank an alle Beteiligten und vorallem ManOki... Die letzte Abfrage hat funktioniert =)
 
Zurück
Oben