Festes Feld in Abfragen / LEFT/RIGHT-JOIN liefert falschen Wert

14/07/2010 - 16:19 von isc73 | Report spam
Hallo zusammen,

ich habe folgendes Problem:

Wenn ich in einer Abfrage ein festes Feld einfüge, z.B.

Name: "Max Mustermann" (Textfeld)
Datum: #31.12.2010# (Datum)
Wert: 1 (Ganzzahl)

dann wird bei einem Left-Join auf diese Abfrage der Wert des festen
Feldes immer zurückgegeben, inbesondere auch dann, wenn keine Referenz
besteht.

Das ganze làsst sich relativ einfach nachvollziehen:

- Tabelle "T1" anlegen mit einem Feld "ID" als Schlüssel/Ganzzahl, ID
Feld mit den Werten 1-10 füllen
- Tabelle "T2" anlegen mit einem Feld "ID" als Schlüssel/Ganzzahl, ID
Feld mit den Werten 1-5 füllen
- Folgende Abfrage "A2" erstellen: SELECT T2.ID, "Das ist ein fester
Text" AS Konstant FROM T2;
- Folgende Abfrage "Ergebnis" erstellen: SELECT T1.ID, A2.ID,
A2.Konstant FROM T1 LEFT JOIN A2 ON T1.ID = A2.ID;

Wenn man die Abfrage "Ergebnis" nun aufruft, dann wird allen ID Werten
aus T1 der Wert des festen Feldes zugeordnet, obwohl nur für die IDs
1-5 eine Referenz besteht.

Mir ist schon klar, dass ich das mit einer IIF-Klausel wieder
rausfiltern kann, indem ich prüfe, ob das Feld A2.ID null ist oder
nicht, aber das kann es doch nicht sein. Oder wenn ich das Ergebnis
der Abfrage "A2" als Tabelle speichere und dann in der Abfrage
"Ergbnis" verknüpfe, kommt das erwartete Ergebnis heraus, aber ich
will keine neun Tabellen erstellen.

Für Eure Hilfe wàre ich sehr dankbar!

Viele Grüße, Ika
 

Lesen sie die antworten

#1 Thomas Möller
14/07/2010 - 17:07 | Warnen spam
Hallo Ika,

Am 14.07.2010 16:19, schrieb isc73:
dann wird bei einem Left-Join auf diese Abfrage der Wert des festen
Feldes immer zurückgegeben, inbesondere auch dann, wenn keine Referenz
besteht.

Das ganze làsst sich relativ einfach nachvollziehen:

- Tabelle "T1" anlegen mit einem Feld "ID" als Schlüssel/Ganzzahl, ID
Feld mit den Werten 1-10 füllen
- Tabelle "T2" anlegen mit einem Feld "ID" als Schlüssel/Ganzzahl, ID
Feld mit den Werten 1-5 füllen
- Folgende Abfrage "A2" erstellen: SELECT T2.ID, "Das ist ein fester
Text" AS Konstant FROM T2;
- Folgende Abfrage "Ergebnis" erstellen: SELECT T1.ID, A2.ID,
A2.Konstant FROM T1 LEFT JOIN A2 ON T1.ID = A2.ID;

Wenn man die Abfrage "Ergebnis" nun aufruft, dann wird allen ID Werten
aus T1 der Wert des festen Feldes zugeordnet, obwohl nur für die IDs
1-5 eine Referenz besteht.



wenn Du aus dem Left Join einen INNER JOIN machst, wird die Abfrage so
funktionieren, wie Du es Dir vorstellst.

HTH
Thomas

Homepage: www.Team-Moeller.de

Ähnliche fragen