AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SQL-Abfrage über mehrere Tabellen

SQL-Abfrage über mehrere Tabellen

Ein Thema von Gor1 · begonnen am 23. Mai 2012 · letzter Beitrag vom 23. Mai 2012
Antwort Antwort
Gor1

Registriert seit: 11. Mai 2011
32 Beiträge
 
Delphi 10.4 Sydney
 
#1

SQL-Abfrage über mehrere Tabellen

  Alt 23. Mai 2012, 08:24
Datenbank: Firebird • Version: 2.5 • Zugriff über: AnyDAC
Hallo,

ich habe mehrere Tabellen mit Texten (eine Tabelle pro Sprache), die über eine Verknüpfungs-Tabelle miteinander in Beziehung stehen.
Jede Sprach-Tabelle besteht dabei aus einem Index und dem zugehörigen Text (z.B. Tabelle_DE: Index_DE Text_DE, Tabelle_EN: Index_EN Text_EN ...).
Die Verknüpfungs-Tabelle hat folgende Spalten:
Index_VK Index_DE Index_EN, Index_FR, Index_IT

Ich suche jetzt eine SQL-Abfrage, die mir für jede Zeile der Verknüpfungstabelle einen Datensatz liefert, in dem die Indizes durch die zugehörigen Texte ersetzt sind, also:
Index_VK Text_DE Text_EN Text_FR Text_IT

Als Schwierigkeit kommt noch hinzu, dass manche Texte in manchen Sprachen gar nicht übersetzt sind, also der Index in der Verknüpfungstabelle Null ist.

Ich habe schon versucht, das mit JOIN hinzubekommen, aber leider bleibt sowohl Delphi als auch Flamerobin beim Versuch hängen, die SQL-Abfrage zu bearbeiten.
Hier mal wie ich es versucht habe:
SELECT de.TEXT_DE, en.TEXT_EN, fr.TEXT_FR, it.TEXT_IT
FROM Tabelle_DE de, Tabelle_EN en, Tabelle_FR fr, Tabelle_IT it
INNER JOIN Verknuepfungstabelle fl ON
((de.INDEX_DE = fl.INDEX_DE) or (fl.INDEX_DE is Null)) and ((en.INDEX_EN = fl.INDEX_EN) or (fl.INDEX_EN is Null)) and
((fr.INDEX_FR = fl.INDEX_FR) or (fl.INDEX_FR is Null)) and ((it.INDEX_IT = fl.INDEX_IT) or (fl.INDEX_IT is Null))

Leider bin ich bisher über die Suche im Forum nicht fündig geworden.

Schöne Grüße,
Georg
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#2

AW: SQL-Abfrage über mehrere Tabellen

  Alt 23. Mai 2012, 08:33
Probiere es mal so:
Code:
SELECT de.TEXT_DE, en.TEXT_EN, fr.TEXT_FR, it.TEXT_IT
FROM Tabelle_DE de, Tabelle_EN en, Tabelle_FR fr, Tabelle_IT it
LEFT JOIN Verknuepfungstabelle fl ON fl.INDEX_DE = de.INDEX_DE
LEFT JOIN Verknuepfungstabelle fl ON fl.INDEX_EN = en.INDEX_EN
LEFT JOIN Verknuepfungstabelle fl ON fl.INDEX_FR = fr.INDEX_FR
LEFT JOIN Verknuepfungstabelle fl ON fl.INDEX_IT = it.INDEX_IT
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.532 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: SQL-Abfrage über mehrere Tabellen

  Alt 23. Mai 2012, 09:02
Falls ich das richtig verstanden habe:
SQL-Code:
SELECT
  de.TEXT_DE, en.TEXT_EN, fr.TEXT_FR, it.TEXT_IT
FROM
  Tabelle_DE de
LEFT JOIN
  Verknuepfungstabelle fl ON fl.INDEX_DE = de.INDEX_DE
LEFT JOIN
  Tabelle_EN en ON en.INDEX_EN = fl.INDEX_EN
LEFT JOIN
  Tabelle_FR fr ON fr.INDEX_FR = fl.INDEX_FR
LEFT JOIN
  Tabelle_IT it ON it.INDEX_IT = fl.INDEX_IT
Wobei ich eine Tabelle je Sprache nicht so gelungen finde. Sobald eine Sprache dazukommt, muss man ja dann die DB-Struktur ändern, indem man eine neue Tabelle anlegt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Gor1

Registriert seit: 11. Mai 2011
32 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: SQL-Abfrage über mehrere Tabellen

  Alt 23. Mai 2012, 09:17
Danke für eure Tipps, der Vorschlag von Rolf liefert leider keinen Datensatz, der Vorschlag von Detlef liefert soweit ich das überblicke die gewünschten Datensätze.

Es ist richtig, dass man eine neue Tabelle anlegen muss, wenn eine neue Sprache dazu kommt, aber das kommt nicht so häufig vor. Ich habe die Datenbank nicht entwickelt, aber der Vorteil bei dieser Struktur ist, dass die Zuordnung der Übersetzungen zueinander sehr flexibel ist.

Schöne Grüße,
Georg
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#5

AW: SQL-Abfrage über mehrere Tabellen

  Alt 23. Mai 2012, 10:58
Besser ist eine Tabelle:
PK, TextID, SprachID, Text
Der PK ist für die eindeutige Identifikation des Eintrages notwendig.

Und eine Tabelle für Sprachen
SprachID, Sprache

Dann hast Du für einen Eintrag:
1, 1, 1, "Baum"
2, 1, 2, "Tree"
3, 1, 3, "Böm"

In der Sprachtabelle
1, "Deutsch"
2, "Englisch"
3, "Pseudoschwedisch"

Nun kannst Du beliebig viele Sprachen anlegen und die Texte für jede oder nur einige Sprachen anlegen. Problemchen dabei ist natürlich, das Du eine "Mastersprache" haben solltest, in der jeder Text mindestens vorhanden sein sollte. Es geht auch ohne, aber das ist mit Folgeproblemen verbunden.

Deine Matrix bekommst du dann über eine einfache Kreuztabelle, in der für jede Sprache ein eigene Spalte angelegt wird.

Aber was solls: Die Struktur scheint ja vorgegeben zu sein. Ein Tipp vielleicht: Du kannst Dir die zukünftige Arbeit erleichtern, wenn Du über so ein Schrottdesign ein Paar Views stülpst. Der Lesezugriff erfolgt nur über diese Views. so kannst Du hinter dieser Fassade die Struktur ruhig ändern. Wenn Du dann noch die Änderungen über Stored Procedures abbildest, hast Du das Schrottdesign komplett verborgen.

Geändert von Iwo Asnet (23. Mai 2012 um 11:01 Uhr)
  Mit Zitat antworten Zitat
Gor1

Registriert seit: 11. Mai 2011
32 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: SQL-Abfrage über mehrere Tabellen

  Alt 23. Mai 2012, 11:44
Hallo Iwo,

danke für deine Hinweise. Kannst du näher erläutern, inwiefern das bisherige Design "Schrott" ist und wo die Vorteile deines Vorschlags liegen? Ich kenne mich beim Datenbank-Design nicht wirklich aus.

Falls du oder jemand anderes Links zu entsprechender (guter) Literatur hat wäre das auch sehr hilfreich.

Schöne Grüße,
Georg
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.532 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: SQL-Abfrage über mehrere Tabellen

  Alt 23. Mai 2012, 11:49
Der Vorteil liegt wie oben schon angesprochen darin, dass man die Datenstruktur nicht ändern muss, sobald eine weitere Sprache dazukommt. Einfach einen weiteren Datensatz für die Sprache einfügen, schon kann der benutzt werden. Als Literatur fällt mir spontan der Artikel in der Wikipedia zur Normalisierung ein.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 06:44 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