Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Select über 3 Tabellen (https://www.delphipraxis.net/84460-select-ueber-3-tabellen.html)

Gruber_Hans_12345 17. Jan 2007 09:33

Datenbank: Firebird • Version: 2.0 • Zugriff über: Console

Select über 3 Tabellen
 
Hi, ich bin auf der suche, wie ich sowas am besten per SQL-Select Abfrage lösen kann, das einzige was mir einfallen würde wäre eine Distinct mit Full outer join, aber glaube nicht, das das Performance mäßig vertretbar wäre.
Gibt es da noch "normale" SQL Mittel oder brauche ich da Stored PRcoedures bzw. muß ich da den Code in Delphi schreiben?

Code:
Tabelle1
ITEM1
ITEM5
ITEM7

Tabelle2
ITEM1
ITEM2
ITEM3


Tabelle3
ITEM1
ITEM3
ITEM8
ITEM9
Resultat
Code:
_______T1 T2 T3
ITEM1  1  1  1
ITEM2  0  1  0
ITEM3  0  1  1
ITEM5  1  0  0
ITEM7  1  0  0
ITEM8  0  0  1
ITEM9  0  0  1

p0w3r5tr34m3r 17. Jan 2007 10:52

Re: Select über 3 Tabellen
 
was hast du an inner joins auszusetzen ?

Code:
SELECT * FROM table1 (INNER JOIN table2 on table2.field = table1.field) INNER JOIN table3 ON table3.field = table2.field WHERE 1
ansonsten könntest du ja auch alle 3 tables einzeln abfragen und die results dann in nem thread extra bearbeiten lassen wobei das auf das gleiche hinaus kommen würde.

Mit freundlichen Grüßen
p0w3r5tr34m3r

angos 17. Jan 2007 11:00

Re: Select über 3 Tabellen
 
Hallo,

die einzige Möglichkeit die ich per SQL hierfür sehe ist tatsächlich mit join zu arbeiten. Aber das ist doch ein ganz normaler SQL-Vorgang, also warum sollte man den nicht nutzen? ;)

Gruber_Hans_12345 17. Jan 2007 11:12

Re: Select über 3 Tabellen
 
... weil es mit einem inner join NICHT funktionieren kann ...

da ich eine anweisung brauche, die alle Elemenete aus der Tabelle1 und zusätzlich dann alle elemente aus Tabelle2 und zusätzlich alle Elemente aus Tabelle3 brauche

ein inner join gibt ja nur die elemente, die in allen 3 vorhanden sind, das sind bei meinem beispiel oben gerade mal 0!
ein full outer join über alle 3 tabellen braucht ... keine ahnung auf jeden fall so lange, das man die SQL Console per Prozess beenden rauskickt.

aber ich glaube, ich hab schon mal meine lösung :
SQL-Code:
select bezeichnung, max(t1), max(t2), max(t3)
from
(select tab1.bezeichnung, 1 as t1, 0 as t2, 0 as t3
from tab1 tab1
union
select tab2.bezeichnung, 0 as t1, 1 as t2, 0 as t3
from tab2 tab2
union
select tab3.bezeichnung, 0 as t1, 0 as t2, 1 as t3
from retour tab3)
group by bezeichnung
[edit] ... hatte einfach übersehen, das der FB2.0 jetzt ja diese SELECT aus SELECT kann


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:09 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