SQL-Statement für Fortgeschrittene

Hallo zusammen,
ich bin gerade dabei, eine SQL-Abfrage zu realisieren und komme nicht so ganz weiter. Folgendes Problem:

Ich will zwei Bezeichnungen eines Artikels aus der Tabelle ‚artikel‘ lesen. Funktioniert mit folgendem weniger komplizierten Statement auch ganz gut:
SELECT bez1, bez2 FROM artikel WHERE id=‚123‘

Jetzt habe ich noch eine Tabelle ‚uebersetzung‘, in der die Übersetzungen der Bezeichnungen in verschiedene Sprachen stehen. Der Schlüssel ist dabei jeweils die deutsche Bezeichnung. Um die Übersetzungen beider Bezeichnungen zu bekommen, habe ich zwei Joins verwendet:

SELECT a.bez1, u1.ueb AS ueb1, a.bez2, u2.ueb AS ueb2
FROM artikel a
LEFT OUTER JOIN uebersetzung u1
ON (a.bez1=u1.key)
LEFT OUTER JOIN uebersetzung u2
ON (a.bez2=u2.key)
WHERE a.id=‚123‘ AND u1.SPRACHE=‚E‘ AND u2.SPRACHE=‚E‘

Funktioniert soweit auch noch ganz gut. Jetzt mein Problem: Wenn zu einer Bezeichnung keine Übersetzung existiert, fällt der Artikel aus der Ergebnismenge heraus. Das soll natürlich nicht sein. Am liebsten hätte ich, das z.B. a.bez1 zurückgegeben wird wenn keine Übersetzung (ueb1) dazu existiert. Ansonsten eben die Übersetzung ueb1. Ich hoffe mein Problem ist verständlich. Ich bin mir nur nicht sicher, ob das überhaupt mit einem SQL-Statement zu machen ist.

Gruß
Jodus

.

Hallo Jodus

hab keine Ahnung ob ich dich richtig verstanden habe. Vielleicht könnte dir hier jemand gezielter helfen, wenn du mal die Tabellenstruktur und die Spalten die ausgegeben werden sollen genauer angibst. Vergiss die verwendete Datenbank nicht.

Was tomh meint könnte etwa so aussehen. (mal eben aus dem Kopf gepinselt, daher keine Gewähr auf richtigkeit)

SELECT a.bez1, a.bez2, NVL(‚nix_da‘, u.ueb)
FROM artikel a, uebersetzung u
WHERE a.bez (+) = u.key
AND a.id = ‚123‘
AND u.sprache LIKE ‚E‘;

– sollte deine a.id nicht numerisch sein setz’ anstelle des “=” besser ein “LIKE”

Schönen Tag noch

Ratloser

hi!

(heute etwas mehr zeit, als nur ein „outer-join“ herumzuschmeißen)

Was tomh meint könnte etwa so aussehen. (mal eben aus dem Kopf
gepinselt, daher keine Gewähr auf richtigkeit)

SELECT a.bez1, a.bez2, NVL(‚nix_da‘, u.ueb)
FROM artikel a, uebersetzung u
WHERE a.bez (+) = u.key
AND a.id = ‚123‘
AND u.sprache LIKE ‚E‘;

genau das meinte ich …

SELECT a.bez1, nvl(u1.ueb,‚nix da‘) AS ueb1, a.bez2, nvl(u2.ueb,‚auch nix da‘) AS ueb2
FROM artikel a,uebersetzung u1, uebersetzung u2
where u1.sprache = ‚E‘
and u2.sprache = ‚E‘
and a.bez1 = u1.key (+)
and a.bez2=u2.key (+)
WHERE a.id=‚123‘

grüße,
tomh

Hi,

den NVL-Parameter umgedreht und das (+) auf der falschen Seite !! Anscheinend nicht mein morgen heute morgen oder einfach nur verstärkt urlaubsreif!

Grüße

Ratloser

(heute etwas mehr zeit, als nur ein „outer-join“
herumzuschmeißen)

Was tomh meint könnte etwa so aussehen. (mal eben aus dem Kopf
gepinselt, daher keine Gewähr auf richtigkeit)

SELECT a.bez1, a.bez2, NVL(‚nix_da‘, u.ueb)
FROM artikel a, uebersetzung u
WHERE a.bez (+) = u.key
AND a.id = ‚123‘
AND u.sprache LIKE ‚E‘;