Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL, eine Ansicht aus zwei verschienen Tabellen (https://www.delphipraxis.net/196664-sql-eine-ansicht-aus-zwei-verschienen-tabellen.html)

Luckner 7. Jun 2018 15:06

Datenbank: Firebird • Version: 2.6 • Zugriff über: Dataset

SQL, eine Ansicht aus zwei verschienen Tabellen
 
Hallo,
möchte gerne in einer DBTable eine Auftragsübersicht für eine Produktionsmaschine, aus 2 verschiedenen Tabellen, darstellen. Es gibt in diesen Tabellen Felder mit gleichen Name, die jedoch wenig miteinander zu tun haben. Es müsste dann eine 'select from Table1 and/or from Table2' sein mit jeweils einem 'where' für jede Table. Könnte mir Jemand, bitte, einen Ansatz geben?

Danke und Gruß, Luckner

hoika 7. Jun 2018 15:12

AW: SQL, eine Ansicht aus zwei verschienen Tabellen
 
Hallo,

Select T1.Id,T1.Name,T2.Name, T2.Tab1Id From Tabelle1 T1
Join Tabelle2 T2 On T1.Id=T2.Tab1Id

T1 und T2 sind Tabellenaliase
Das Feld Tab1Id in Tabelle2 ist der Foreign Key auf das Feld Id von Tabelle1

Uwe Raabe 7. Jun 2018 15:16

AW: SQL, eine Ansicht aus zwei verschienen Tabellen
 
Es ist nicht ganz klar, ob du einen JOIN oder eine UNION brauchst. Kannst du dein Problem an einem konkreten Beispiel genauer beschreiben?

himitsu 7. Jun 2018 15:23

AW: SQL, eine Ansicht aus zwei verschienen Tabellen
 
Ich glaub er meint JOIN.
JOIN ... beide Tabellen nebeneinander (Felder aneinandergehängt)
UNION ... beide Tabellen untereinander (Datensätze aneinandergehängt)

Wenn Felder gleich heißen und du willst beide im Ergebnis/Record haben, dann mußt du eben einen der Beiden umbenennen.
SQL-Code:
SELECT t1.aaa, t2.aaa AS bbb FROM ...


Siehe hoika: das geht bei vielen DBMS und DB-Komponenten, wobei dort die DB das umbenennt. (z.B. "_1" an den doppelten Namen anhängen)
Aber besser ist es meistens, wenn du es umbenennst, dann weißt du auch immer wie es heißt, unabhängig davon, wie das DBMS solche Probleme löst.


Und du willst doch bestimmt auch eine DBQuery-Komponente und keine DBTable-Komponente verwenden

Luckner 7. Jun 2018 15:32

AW: SQL, eine Ansicht aus zwei verschienen Tabellen
 
An einer Maschine werden Aufträge von 2 verschiedenen Auftragstabellen erstellt. Der Maschineneinrichte möchte eine tabellarische übersicht haben über die gesamten Aufträge für diese Maschine. Also ich glaube, dass 'UNION' das Richtige wäre. Tabelle2 hat keine Gemeinsamkeiten mit Tabelle1. Ausser, dass die Felder gleich lauten:

Luckner

Luckner 7. Jun 2018 15:34

AW: SQL, eine Ansicht aus zwei verschienen Tabellen
 
Ich verwende DBQuery.

himitsu 7. Jun 2018 15:46

AW: SQL, eine Ansicht aus zwei verschienen Tabellen
 
OK, dann Union.

Du baust dir das SELECT für die erste Tabelle,

Dann nochmal ein SELECT für die zweite Tabelle.
* wie die Felder heißen ist egal
* hier müssen aber die Typen der Felder denen der Ersten gleichen/kompatibel sein UND die Anzahl der Felder muß übereinstimmen

dann UNION dazwischen

SQL-Code:
SELECT aaa, bbb FROM t1 WHERE ...
UNION
SELECT aaa, ccc FROM t2 WHERE ...
Willst du andere Feldnamen, dann im ersten/oberen SELECT mit AS umbenennen
Das Ergebnis hat die Namen und Typen des ersten SELECTs.

DasWolf 7. Jun 2018 15:51

AW: SQL, eine Ansicht aus zwei verschienen Tabellen
 
Möchtest Du alle Daten aus beiden Tabellen anzeigen, dann ist UNION ALL Deine Wahl.

hoika 7. Jun 2018 15:57

AW: SQL, eine Ansicht aus zwei verschienen Tabellen
 
Hallo,
bei Union All würde ich aufpassen, was der Kunde will (Duplicates ja/nein)

https://firebirdsql.org/file/documen...ml-select.html

Beim Union würde ich das noch so machen

Select * From
(
Select Tab1
Union
Select Tab2
)
Order by Datum/Uhrzeit


Du musst nur höllisch aufpassen, weil Du ja mit einer inoffziellen Firebird-Version arbeitest (2.6) ;)

jobo 7. Jun 2018 16:14

AW: SQL, eine Ansicht aus zwei verschienen Tabellen
 
Also wenn es Daten von 2 verschiedenen Auftägen sind oder überhaupt wenn es eine Übersicht für einen Menschen ist, der sich persönlich einen Überblick verschaffen möchte, würde ich ein UNION ALL nehmen. Man will da sicher keinen impliziten Dublettenabgleich haben.
Wenn wirklich zufällig etwas identisch sein sollte, kann es mit etwas Glück (passende Sortierung) noch auffallen.

Um ganz sicher zu gehen, dass es KEINE Vermischung gibt, kann man folgendes machen:

select 'xy' as Auftragsquelle, xy.* from tabellexy xy
union all
select 'ab' as Auftragsquelle, ab.* from tabelleab ab

Das Ergebnis nach Bedarf sortieren und vor allem auch das generierte Feld "Auftragsquelle" immer mit ausgeben, bei jedem Report!


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 Uhr.
Seite 1 von 2  1 2      

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