AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird: SQL JOIN gesucht

Ein Thema von MyRealName · begonnen am 1. Nov 2023 · letzter Beitrag vom 5. Nov 2023
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
673 Beiträge
 
Delphi 10.4 Sydney
 
#1

Firebird: SQL JOIN gesucht

  Alt 1. Nov 2023, 10:35
Datenbank: Firebird • Version: 4 • Zugriff über: UniDAC
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:
select *
from Property_names P, Lieferadressen L
WHERE P.Id_Type=1
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)

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:
SELECT L.*, P.*
FROM Lieferadressen L
JOIN Property_names P
WHERE P.Id_Type=1
Ideen?
  Mit Zitat antworten Zitat
lxo

Registriert seit: 30. Nov 2017
260 Beiträge
 
Delphi 12 Athens
 
#2

AW: Firebird: SQL JOIN gesucht

  Alt 1. Nov 2023, 10:40
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:
select *
from Property_names P, Lieferadressen L
WHERE P.Id_Type=1
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)

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:
SELECT L.*, P.*
FROM Lieferadressen L
JOIN Property_names P
WHERE P.Id_Type=1
Ideen?
Hilft dir vielleicht "cross join" weiter?
siehe https://firebirdsql.org/file/documen...elect-joins-de

SQL-Code:
select *
from Property_names P
cross join Lieferadressen L
WHERE P.Id_Type=1
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
672 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Firebird: SQL JOIN gesucht

  Alt 1. Nov 2023, 10:41
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?
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
673 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Firebird: SQL JOIN gesucht

  Alt 1. Nov 2023, 10:52
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!
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
672 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Firebird: SQL JOIN gesucht

  Alt 1. Nov 2023, 10:54
also eine n:m Beziehung ... die wird idR über eine Zwischentabelle abgebildet.
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
646 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Firebird: SQL JOIN gesucht

  Alt 1. Nov 2023, 20:48
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.
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
673 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Firebird: SQL JOIN gesucht

  Alt 1. Nov 2023, 23:42
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
  Mit Zitat antworten Zitat
Jumpy
Online

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#8

AW: Firebird: SQL JOIN gesucht

  Alt 2. Nov 2023, 09:05
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)
Unabhängig davon, dass sinnvoll ist, was Joachim und IBExpert gesagt haben. Wäre das nicht mit einem Left Join (statt Cross) abhandelbar mit einer immer wahren Bedingung?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
618 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Firebird: SQL JOIN gesucht

  Alt 2. Nov 2023, 12:26
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.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Jumpy
Online

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#10

AW: Firebird: SQL JOIN gesucht

  Alt 2. Nov 2023, 12:46
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.
Ah OK, ich kenn mich halt mit Firebird nicht aus. In Oracle hätte man das glaub ich sinngemäß so machen können:
SQL-Code:
Select T1.*,T2.*
From T1
Left Join T2 On 1=1
Where T1.Feld1='Irgendwas'
Ralph
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz