über Datum Joinen?

14/05/2008 - 15:22 von John Clark | Report spam
Hallo,

ich habe eine Tabelle(A) mit zwei Datumswerten, die einen Zeitraum(von-bis)
darstellen sollen.

In einer anderen Tabelle(B) habe ich ein Feld Datum.

Nun suche ich eine effektive Abfrage um die ID der Tabelle(A) den Werten in
Tabelle(B) zuzuordnen.

Ich möchte also wissen in welchen Zeitraum die Zeile der Tabelle(B) liegt um
aus Tabelle(A) weitere Werte zu bekommen.

bisher habe ich das so gemacht:

SELECT id ,
(SELECT id FROM Tabelle_A WHERE (Tabelle_A.datum BETWEEN von AND bis) AS
Zeit_ID

FROM Tabelle_B

geht es besser bzw. schneller?

Die Tabellen werden recht gross und das alles recht langsam.
 

Lesen sie die antworten

#1 Elmar Boye
14/05/2008 - 18:08 | Warnen spam
Hallo John,

John Clark schrieb:
ich habe eine Tabelle(A) mit zwei Datumswerten, die einen Zeitraum(von-bis)
darstellen sollen.

In einer anderen Tabelle(B) habe ich ein Feld Datum.

Nun suche ich eine effektive Abfrage um die ID der Tabelle(A) den Werten in
Tabelle(B) zuzuordnen.

Ich möchte also wissen in welchen Zeitraum die Zeile der Tabelle(B) liegt um
aus Tabelle(A) weitere Werte zu bekommen.

bisher habe ich das so gemacht:

SELECT id ,
(SELECT id FROM Tabelle_A WHERE (Tabelle_A.datum BETWEEN von AND bis) AS
Zeit_ID

FROM Tabelle_B

geht es besser bzw. schneller?



Grundsàtzlich können in einem JOIN beliebige Verknüpfungsausdrücke
verwendet werden (auch wenn so manch ein Designer nur "=" unterstützt).

Obiges könnte mittels JOIN also geschrieben werden:

SELECT Tabelle_B.id, Tabelle_A.id AS Zeit_ID
FROM Tabelle_B INNER JOIN Tabelle_A
ON Tabelle_A.datum BETWEEN Tabelle_B.von AND Tabelle_B.bis

Allerdings liefert Dir das unter Umstànden mehrere Zeilen, wenn
im Zeitraum mehrere Treffer liegen - wohingegen Deine Unterabfrage
einen Fehler produzieren würde, wenn mehrere Zeilen existieren
(zumindest beim SQL Server, andere RDBMS liefern u. U. Zufallsergebnisse).

Die Tabellen werden recht gross und das alles recht langsam.



Optimierer (je nach RDBMS) sind bei Joins hàufig besser.
Ein (abdeckender) Index auf Datum, ID kann allerdings auch nicht schaden

Gruß Elmar

Ähnliche fragen