AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SQL, eine Ansicht aus zwei verschienen Tabellen
Thema durchsuchen
Ansicht
Themen-Optionen

SQL, eine Ansicht aus zwei verschienen Tabellen

Ein Thema von Luckner · begonnen am 7. Jun 2018 · letzter Beitrag vom 8. Jun 2018
Antwort Antwort
Seite 1 von 2  1 2      
Luckner

Registriert seit: 28. Nov 2006
Ort: Berlin
418 Beiträge
 
Delphi 7 Enterprise
 
#1

SQL, eine Ansicht aus zwei verschienen Tabellen

  Alt 7. Jun 2018, 16:06
Datenbank: Firebird • Version: 2.6 • Zugriff über: Dataset
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: SQL, eine Ansicht aus zwei verschienen Tabellen

  Alt 7. Jun 2018, 16:12
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
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#3

AW: SQL, eine Ansicht aus zwei verschienen Tabellen

  Alt 7. Jun 2018, 16:16
Es ist nicht ganz klar, ob du einen JOIN oder eine UNION brauchst. Kannst du dein Problem an einem konkreten Beispiel genauer beschreiben?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#4

AW: SQL, eine Ansicht aus zwei verschienen Tabellen

  Alt 7. Jun 2018, 16:23
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.
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
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 7. Jun 2018 um 16:30 Uhr)
  Mit Zitat antworten Zitat
Luckner

Registriert seit: 28. Nov 2006
Ort: Berlin
418 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: SQL, eine Ansicht aus zwei verschienen Tabellen

  Alt 7. Jun 2018, 16:32
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
  Mit Zitat antworten Zitat
Luckner

Registriert seit: 28. Nov 2006
Ort: Berlin
418 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: SQL, eine Ansicht aus zwei verschienen Tabellen

  Alt 7. Jun 2018, 16:34
Ich verwende DBQuery.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#7

AW: SQL, eine Ansicht aus zwei verschienen Tabellen

  Alt 7. Jun 2018, 16:46
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
DasWolf

Registriert seit: 7. Jun 2016
76 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

AW: SQL, eine Ansicht aus zwei verschienen Tabellen

  Alt 7. Jun 2018, 16:51
Möchtest Du alle Daten aus beiden Tabellen anzeigen, dann ist UNION ALL Deine Wahl.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: SQL, eine Ansicht aus zwei verschienen Tabellen

  Alt 7. Jun 2018, 16:57
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)
Heiko

Geändert von hoika ( 7. Jun 2018 um 16:59 Uhr)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#10

AW: SQL, eine Ansicht aus zwei verschienen Tabellen

  Alt 7. Jun 2018, 17:14
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!
Gruß, Jo
  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 10:32 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