Abfrage aus 2 Tabellen

bequiet

Neuer Benutzer
Beiträge
4
Hallo zusammen,

ich komme hier leider bei einer Aufgabe nicht weiter...

Ich habe 2 Tabellen gegeben. In Tabelle A stehen Wörter auf Deutsch und Englisch. Jede Zeile hat 3 Spalten, ID, Wort, Sprache (In Sprache steht 0 für Englisch und 1 für Deutsch). In der 2. Tabelle sind die ID´s aus Tabelle A über Kreuz gespeichert in IDA und IDB um somit zu kennzeichnen das dies die jeweilige Übersetzung ist.
Also Quasi
ID 1 Apfel
ID 2 Apple

IDA 1 IDB 2
IDA 2 IDB 1

Jetzt soll ich eine Liste der Worte ausgeben und als .csv speichern. Spalter 1 Deutsch, Spalte 2 Englisch.
Ich bekomme das bisher nicht wirklich hin. Kann mir da jemand helfen? Bisher gebe ich nur folgendes aus:

Select src_term_id, dst_term_id, bbk_term.term from bbk_trans left join bbk_term on bbk_term.id = src_term_id;

Gruß
 
Werbung:
Du musst von der Tabelle der deutschen Wörter zu den Übersetzungen joinen und von dort weiter zu den englischen Wörtern

Sowas in der Art:
Code:
select d.word as wort_deutsch, e.word as wort_englisch
from words d
  join translations tr on d.id = tr.from_word
  join words e on e.id = tr.to_word and e.lang = 0
where d.lang = 1

Online Beispiel
 
Das Problem ist, dass die Deutschen und Englischen Wörter in der gleichen Tabelle stehen. Die einzige Unterscheidung ist eben die language id
 
Das habe ich schon verstanden.

Durch "where d.lang = 1" werden nur die deutschen Wörter für den Alias "d" selektiert und durch die Bedingung "and e.lang = 0" werden für den Alias "e" nur die englischen Wörter selektiert.
 
Aber deine Abfrage geht doch davon aus das die englischen und deutschen Wörter in anderen Tabellen stehen. Es gibt aber nur die 3 Spalten und die beiden Tabellen. In der einen stehen alle Wörter und die Sprachid, und in der anderen sind nur die ID´s mit der Zuordnung gespeichert. Also IDA -> IDB und IDA <- IDB oder verstehe ich da was grundlegend falsch?
 
Nein, meine Abfrage geht davon aus, dass die Übersetzung (von -> nach) in einer anderen Tabelle stehen. Die Wörter stehen alle in der gleichen Tabelle (words)
Hast Du Dir mein Online Beispiel angesehen? Was ist an den Tabellen anders als an Deinen?

Für solche Fragen ist es immer am Besten wenn man die Tabellen als CREATE TABLE Statement mit in die Frage aufnimmt um Verwirrungen zu vermeiden. Oder gleich ein kleines Online Skript wie ich es in meiner Antwort gemacht habe.

Du kannst meine Abfrage auch so schreiben:
Code:
select d.word as wort_deutsch, e.word as wort_englisch
from (
  select *
  from words
  where lang = 1
) de_words
  join translations tr on de_words.id = tr.from_word
  join (
    select *
    from words
    where lang = 0
  ) en_words on en_words.id = tr.to_word
Vielleicht ist es so klarer.

Oder explizit mit common table expressions:
Code:
with de_words as (
  select *
  from words
  where lang = 1
), en_words as (
  select *
  from words
  where lang = 0
)
select d.word as wort_deutsch, e.word as wort_englisch
from de_words
  join translations tr on de_words.id = tr.from_word
  join en_words on en_words.id = tr.to_word
 
Werbung:
Zurück
Oben