![]() |
Datenbank: Firebird • Version: 4 • Zugriff über: UniDAC
Firebird: SQL JOIN gesucht
Ich habe 2 Tabellen, die aber eigentlich keinen gemeinsamen Nenner haben, mache ich da einen select drauf ohne einen direkten JOIN zu nutzen, also
Code:
dann kommt genau raus, was ich will: Für jeden Eintrag in Property_Names finde ich x Einträge (wobei x = Anzahl der Einträge in Lieferadressen)
select *
from Property_names P, Lieferadressen L WHERE P.Id_Type=1 Jetzt lässt Firebird aber keine mixed-JOINS mehr zu und ich würde mich für explizite JOINs eintscheiden wollen. Frage nun, wie geht das, wenn da keine Verbindungsfelder da sind ? Weil das hier geht ja nicht:
Code:
Ideen?
SELECT L.*, P.*
FROM Lieferadressen L JOIN Property_names P WHERE P.Id_Type=1 |
AW: Firebird: SQL JOIN gesucht
Zitat:
siehe ![]()
SQL-Code:
select *
from Property_names P cross join Lieferadressen L WHERE P.Id_Type=1 |
AW: Firebird: SQL JOIN gesucht
Datenbankdesign oder Beschreibung kaputt.
Dein erstes Statement macht ein kartesisches Produkt - also alles mit allem verknüpfen. Kannst Du evtl mal anhand von wenigen Beispieldaten zeigen, was es gibt und was Du erwartest? |
AW: Firebird: SQL JOIN gesucht
Die Idee ist, dass man eine Property für etwas anlegt (sagen wir für einen Kunden). Jetzt kann der Kunde natürlich mehrere Lieferadressen haben. Ich möchte natürlich nciht für jeden Kunden und für jede Property das anlegen. Die Idee ist also, die Property in PROPERTY_NAMES abzulegen und das SQL lädt jede Property (wo ID_Type = x, wobei x jeweils für das genutzte Object steht, zum Bsp. Kunde oder Lieferant oder Produkt) in Verbindung zur Lieferadresse. Wenn nichts angelegt ist, muss halt ein leerer String kommen, aber die Lieferadresse muss zur Property da sein.
CROSS JOIN tut es. Hatte das gar nicht mehr auf dem Schirm, weil ich es nie brauchte. Danke! |
AW: Firebird: SQL JOIN gesucht
also eine n:m Beziehung ... die wird idR über eine Zwischentabelle abgebildet.
|
AW: Firebird: SQL JOIN gesucht
neben dem hinweis von joachim, das eine zwischentabelle dafür angesagt sein sollte, schau dir mal bei deinen sqls mit einem geeigneten werkzeug (ich wüsste da eins) an, wie viele indexed oder non indexed reads du damit erzeugst. wenn beide tabelle je 100 datensätze haben rödelt firebird ohne passende joins oder zwischentabelle 10000 recordkombinationen zusammen, aus denen du dann die ergebnismenge bekommst. Wenn in beiden tabellen je 1000 records sind, dann wird die eingangsmenge schon aus 1mio records bestehen.
Wofür auch immer du deine konstruktion benutzen willst, mach es anders, bevorzugt mit zwischentabelle und sei es auch nur das die nur aus 2 ids besteht, ist alles besser als es so zu machen. |
AW: Firebird: SQL JOIN gesucht
Danke Holger, ich schau morgen mal nach einer Lösung mit einer Zwischentabelle. Und ein gutes Werkzeug haben wir schon, ist sogar das Beste :) IbExpert
|
AW: Firebird: SQL JOIN gesucht
Zitat:
|
AW: Firebird: SQL JOIN gesucht
Nö. Nicht mit der aktuellen Umsetzung. Denn es gibt keine ordentliche Bedingung. Daher ja überhaupt erst die Frage.
Ich würde auch mit einer weiteren Tabelle arbeiten um die Beziehung abzubilden. Das macht es leicht sich daraus jeden Art von Information zu ziehen, egal in welche Richtung man schaut. |
AW: Firebird: SQL JOIN gesucht
Zitat:
SQL-Code:
Select T1.*,T2.*
From T1 Left Join T2 On 1=1 Where T1.Feld1='Irgendwas' |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz