Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Ergebnismenge wahlweise auf zwei Tabellen (https://www.delphipraxis.net/97693-ergebnismenge-wahlweise-auf-zwei-tabellen.html)

Andreas H. 14. Aug 2007 17:03

Datenbank: mySQL • Version: 5 • Zugriff über: ZEOS

Ergebnismenge wahlweise auf zwei Tabellen
 
Hallo,

ich habe eine Tabelle Liste mit folgendem Aufbau:

ID: integer, Primärschlüssel
Detail1_ID: integer
Detail2_ID: integer

Detail1_ID und Detail2_ID binden an zwei Tabellen Detail1 und Detail2 mit jeweils den Feldern ID und Name.

In Liste wird pro Datensatz nur ein Feld Detail1_ID oder Detail2_ID benutzt, das andere Feld enthält NULL.

Ich möchte nun eine Ergebnismenge mit den Spalten ID und Name, wobei Name aus der Tabelle Detail1 oder Detail2 stammt, je nach dem welches Feld Detail1_ID oder Detail2_ID nicht NULL ist.

Wer kann mir etwas auf die Sprünge helfen? Mit IF, CASE etc. hatte ich seither keinen Erfolg.

Die Tabelle Liste könnte auch so aussehen:
ID: integer, Primärschlüssel
Detail_ID: integer
Detail_Tab: integer // 1: Detail1, 2: Detail2


Gruß Andreas

shmia 14. Aug 2007 17:09

Re: Ergebnismenge wahlweise auf zwei Tabellen
 
SQL-Code:
SELECT ID, Detail1_ID AS Name, 1 AS Detail_Tab
FROM LISTE
WHERE NOT Detail1_ID IS NULL
UNION ALL
SELECT ID, Detail2_ID AS Name, 2 AS Detail_Tab
FROM LISTE
WHERE NOT Detail2_ID IS NULL

Andreas H. 14. Aug 2007 17:22

Re: Ergebnismenge wahlweise auf zwei Tabellen
 
Hallo,

das ging aber schnell.

SQL-Code:
UNION ALL
ist wohl hier das Geheimnis.


Vielen Dank, Andreas

marabu 15. Aug 2007 05:39

Re: Ergebnismenge wahlweise auf zwei Tabellen
 
Guten Morgen Andreas,

wenn deine beiden Detail-Tabellen Teil einer Gen-Spec-Relation wären, dann hättest du nur einen der beiden Fremdschlüssel in deiner Master-Tabelle. Hast du dein Datenmodell schon darauf hin überprüft?

Grüße vom marabu

Andreas H. 15. Aug 2007 08:31

Re: Ergebnismenge wahlweise auf zwei Tabellen
 
Hallo,

ich kann mit Deiner Frage leider nichts anfangen.

Die beiden Detailtabellen speichern unterschiedliche Arten von Daten.
Die "Master"-Tabelle ist bildet so eine Art Favoritenliste, in der Zeiger auf die die Detailtabellen gespeichert werden. So kann ich in einem DBGrid die Detais zu beiden (grundverschiedenen) Detail-Tabellen anzeigen.

Hintergrund:
Ich erstelle ein Programm, in dem Dokumente verwaltet werden. Die Infos zu den Dokumenten werden in einer Tabelle gespeichert. Eine weitere Funktion des Programm ist die Gruppierung von Dokumenten in Mappen. Jede Mappe ist ein Datensatz in einer Tabelle. Diese beiden Tabellen sind die Detailtabellen von oben.

Das Programm soll eine Favoritenfunktion bieten, in der man Dokumente und Mappen, die man regelmäßig benötigt, an exponierter Stelle anzeigt. Diese Funktion habe ich mit dier oben aufgeführten Abfrage realisiert.

Meine Datenbank speichert nur unabhängige Tabellen (zur Zeit jedenfalls noch!). Die Beziehungen werden erst durch die Anwendung hergestellt.

Kannst Du mir erklären, was hinter Deiner Frage steckt?

Gruß Andreas

marabu 15. Aug 2007 14:17

Re: Ergebnismenge wahlweise auf zwei Tabellen
 
Hallo Andreas,

zwei Detailtabellen und zwei exklusiv genutzte Fremdschlüssel - das roch für mich förmlich nach falsch implementierter Gen-Spec-Relation.

Falls sich deine Rückfrage auf Gen-Spec bezieht, so verbergen sich dahinter Generalisierung und Spezialisierung - vielleicht kennst du diesen Beziehungstyp eher unter der Bezeichnung IS-A (Ist-Ein)?

Ich verstehe zwar noch nicht, was einen Eintrag in deiner Liste zum Favoriten macht - die Existenz an sich oder eine statistische Auswertung, aber wenn ich dich richtig verstehe, dann besteht zwischen deinen Detailtabellen DOKUMENTE und MAPPEN auch noch eine 1:N Beziehung. Das würde ich je nach Randbedingung immer noch als GEN-SPEC-Beziehung implementieren, eventuell über eine rekursive Tabelle.

Freundliche Grüße

Andreas H. 15. Aug 2007 17:00

Re: Ergebnismenge wahlweise auf zwei Tabellen
 
Hallo,

nein, Dokumente und Mappen haben keine direkte Beziehung zueinander.

Und rekursive Tabellen alla Strukturstückliste sind nicht gefragt.

Kannst Du mir ein bisschen mehr zu der Gen-Spec erzählen oder ne gut Quelle nennen?

Gruß Andreas

marabu 15. Aug 2007 18:48

Re: Ergebnismenge wahlweise auf zwei Tabellen
 
Zitat:

Zitat von Andreas H.
nein, Dokumente und Mappen haben keine direkte Beziehung zueinander.

Dann habe ich dich scheinbar völlig missverstanden, als du geschrieben hast, dass Dokumente zu Mappen gruppiert würden. Aber du hast auch geschrieben, dass du unabhängige Tabellen speicherst und die Beziehungen alleine durch das Programm herstellen würdest. Ich hoffe du weißt was du tust. Vielleicht ist es auch nur ein Kommunikationsproblem.

Zitat:

Zitat von Andreas H.
Kannst Du mir ein bisschen mehr zu der Gen-Spec erzählen oder ne gut Quelle nennen?

Vielleicht solltest du dir den passenden Wikipedia-Artikel durchlesen, bevor ich dich mit Fachliteratur bewerfe.

Viel Glück mit deinem Projekt.

Andreas H. 15. Aug 2007 20:26

Re: Ergebnismenge wahlweise auf zwei Tabellen
 
Hallo,

ja, ich denke, dass Du keine richtige Idee von meiner Anwendung hast.

Das Thema Tabellenbeziehungen (referenzielle Integrität...) habe ich zu Paradox-Zeiten (ObjectPAL, Delphi 3) benutzt. Mit mySQL habe ich mir das bisher gespart. Aber ich bin ja noch sooo unerfahren...

Mein Projekt steht übrigens hier

Und ich suche noch Unterstützung! :hi:

Gruß Andreas


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