Nicht vorhandene Einträge suchen

  • Themenstarter Themenstarter erika7
  • Beginndatum Beginndatum
E

erika7

Hallo zusammen,

hab im Forum gesucht, aber leider nichts gefunden, weiß aber auch nicht wirklich, nach was ich da suchen muss. Außerdem bin ich in SQL noch nicht so fit, wie ich es für diese Anforderung vielleicht sein müsste.

Also es geht um folgendes:

Ich habe drei Tabellen für Übersetzungsterme die ich hier mal sehr vereinfacht beschreibe:

Tabelle 1: key, term
Tabelle 2: key, sprache
Tabelle 3: termkey, sprachkey, übersetzung

Ein kleines Beispiel mit drei Übersetzungstermen:
Tabelle 1: (1,Herr), (2,Frau), (3,Kind)
Tabelle 2: (1,DE), (2,EN), (3,FR)
Tabelle 3: (1,1,Herr), (2,1,Frau), (3,1,Kind), (2,1,Mr), (3,2,Madame)

Mit SELECT ... FROM Tab1, Tab2 erhalte ich alle Term-Sprachkombinationen, die es gibt, das ist mir klar.

Und mit SELECT ... FROM Tab1, Tab2, Tab3 WHERE Tab1.key=Tab3.termkey AND Tab2.key=Tab3.sprachkey würde ich alle definierten Terme bekommen. (Herr, DE, Herr), (Frau, DE, Frau), (Kind, DE, Kind), (Herr, EN, Mr), (Frau, FR, Madame)

Was ich aber brauche, sind genau die Terme, die nicht definiert sind, also (Frau, EN), (Kind, EN), (Herr, FR), (Kind, FR).

Ist so etwas machbar? Kann man irged wie die Differenz zwischen der ersten und der zweiten Abfrage berechnen? Und wenn ja, wie?

Würde mich freuen, wenn mir hier einer helfen könnte.

Gruß,

Erika
 
so
SQL:
SELECT
	allalloc.*
FROM
	(
		SELECT 
			term.key AS termkey,
			lang.key AS sprachkey
		FROM 
			tab1 AS term, 
			tab2 AS lang
	) AS allalloc
	LEFT JOIN tab3 AS alloc
		ON allalloc.termkey = alloc.termkey
		AND allalloc.sprachkey = alloc.sprachkey
WHERE
	alloc.termkey IS NULL
oder so
SQL:
SELECT 
	term.key AS termkey,
	lang.key AS sprachkey
FROM 
	tab1 AS term, 
	tab2 AS lang
WHERE
	ROW(term.key, lang.key) NOT IN (SELECT termkey, sprachkey FROM tab3)

Beides geht....
 
Klasse Ansatz yaslaw, meiner war etwas sehr komplex, da ich ROW noch gar nicht kannte :-)
Damit aber die Ausgabe korrekt ist, selektieren wir nicht den key :D
SQL:
SELECT tab1.term,
	   tab2.sprache
FROM 
	tab1,
	tab2
WHERE
ROW(tab1.key, tab2.key) NOT IN (SELECT termkey, sprachkey FROM tab3)
 
Zuletzt bearbeitet von einem Moderator:
Hallo yaslaw, hallo Steusi,

vielen Dank für Eure Antworten. Die Lösung ist genau das was ich suchte. Das mit den Subqueries muss ich wohl noch lernen, aber die Lösung ist sehr elgenant und einfach umzusetzen. Wie immer: Ganz einfach, wenn man weiß wies geht... ;-)

Dami ist mein Problem gelöst.

Nochmals vielen Dank,

erika7
 
Zurück