Abfrage Problem -> Join

Abfrage Problem -> Join

am 14.12.2005 16:40:31 von Ralf Rimmerg

Ich habe folgende Tabellen

Artikel:
ID
Title

Datei
ID
Dateiname

Beziehung
ID
ArtikelID
DateiID


Eigentlich ein recht simpler Aufbau.
Einem Artikel kann man mehrere Dateien zuordnen.
Eine Datei kann zu verschiedenen Artikel gehören.

Nun möchte ich dem Benutzer eine Auswahl von Dateien geben, die noch nicht
dem Artikel zugeordnet sind.
Ich mache das über eine Join Abfrage und folgender Selektion:
`Beziehung`.`ArticleID` !=ARTIKELID or `Beziehung`.`ArticleID`IS NULL

Das Problem ist nun, das die Selection `Beziehung`.`ArticleID` !=ARTIKELID
nicht funktioniert, da durch den Join eine zufällige ArtikelID gewählt wird.

Wie kann ich das Problem lösen?

Re: Abfrage Problem -> Join

am 14.12.2005 16:57:15 von Dominik Echterbruch

Ralf Rimmerg wrote:
> Ich habe folgende Tabellen
>
> Artikel:
> ID
> Title
>
> Datei
> ID
> Dateiname
>
> Beziehung
> ID
> ArtikelID
> DateiID
>
>
> Eigentlich ein recht simpler Aufbau.
> Einem Artikel kann man mehrere Dateien zuordnen.
> Eine Datei kann zu verschiedenen Artikel gehören.
>
> Nun möchte ich dem Benutzer eine Auswahl von Dateien geben, die noch nicht
> dem Artikel zugeordnet sind.

Das hier sollte tun, was du möchtest:

SELECT d.Dateiname
FROM Datei d
LEFT JOIN Beziehung b ON b.DateiID = d.ID AND b.ArtikelID =
WHERE b.DateiID IS NULL

> Ich mache das über eine Join Abfrage und folgender Selektion:
> `Beziehung`.`ArticleID` !=ARTIKELID or `Beziehung`.`ArticleID`IS NULL
>
> Das Problem ist nun, das die Selection `Beziehung`.`ArticleID` !=ARTIKELID
> nicht funktioniert, da durch den Join eine zufällige ArtikelID gewählt wird.

Poste bitte das nächste Mal die komplette Abfrage. Das erleichtert die
Fehlersuche.


Grüße,
Dominik
--
MonstersGame - Die Schlacht zwischen Vampiren und Werwölfen
http://spielwelt6.monstersgame.net/?ac=vid&vid=3018786

Re: Abfrage Problem -> Join

am 14.12.2005 20:22:41 von Ralf Rimmerg

Vielen Dank!
Genau so gehts. :-)
<- Wußte gar nicht, dass man mehrere hinter dem JOIN ein "erweitertes" ON
hängen kann.

Thanks


> Das hier sollte tun, was du möchtest:
>
> SELECT d.Dateiname
> FROM Datei d
> LEFT JOIN Beziehung b ON b.DateiID = d.ID AND b.ArtikelID =
> WHERE b.DateiID IS NULL
>
>> Ich mache das über eine Join Abfrage und folgender Selektion:
>> `Beziehung`.`ArticleID` !=ARTIKELID or `Beziehung`.`ArticleID`IS NULL
>>
>> Das Problem ist nun, das die Selection `Beziehung`.`ArticleID`
>> !=ARTIKELID nicht funktioniert, da durch den Join eine zufällige
>> ArtikelID gewählt wird.
>
> Poste bitte das nächste Mal die komplette Abfrage. Das erleichtert die
> Fehlersuche.
>
>
> Grüße,
> Dominik
> --
> MonstersGame - Die Schlacht zwischen Vampiren und Werwölfen
> http://spielwelt6.monstersgame.net/?ac=vid&vid=3018786

Re: Abfrage Problem -> Join

am 15.12.2005 09:30:18 von Dominik Echterbruch

Ralf Rimmerg wrote:
[ToFu repariert]
>>Das hier sollte tun, was du möchtest:
>>
>>SELECT d.Dateiname
>>FROM Datei d
>>LEFT JOIN Beziehung b ON b.DateiID = d.ID AND b.ArtikelID =
>>WHERE b.DateiID IS NULL
>
> Vielen Dank!
> Genau so gehts. :-)
> <- Wußte gar nicht, dass man mehrere hinter dem JOIN ein "erweitertes" ON
> hängen kann.

In diesem Fall ist das sogar zwingend notwendig, weil du ja genau die
Zeilen haben möchtest, bei denen es _keine_ passenden Zeilen in
Beziehung gibt. Somit gibt es dann natürlich (nach dem JOIN) auch keine
ArtikelID mehr, auf die du dich beziehen könntest. Zum Zeitpunkt des
Joinens sind die Daten aber noch bekannt. Also kannst du nur in diesem
einen Augenblick darauf filtern.


Grüße,
Dominik
--
MonstersGame - Die Schlacht zwischen Vampiren und Werwölfen
http://spielwelt6.monstersgame.net/?ac=vid&vid=3018786