Hi,
Hallo !
Erst einmal vielen Dank für die Antwort.
das liefert leider „zuviel“, da ich vorher auf die attid
filtern muss.
Wieso mußt Du irgendwas filtern?
Das Problem ist, das in der 2. Tabelle (id,attid,attval) (id,attid) einen zusammengesetzten Schlüssel bilden, und deswegen zu einer id mehrere Zeilen mit verschiedenen attid’s existieren. Für die gesuchte attid kann aber auch kein Eintrag (id,attid) vorhanden sein.
Ich will alle id’s aus Tabelle t1. Wenn (id, festgelegte attid) in Tabelle t2 enthalten ist, dann aus dieser Zeile attval, sonst null. Aber eben nicht die restlichen Zeilen (id, attidfestglegter Wert)
Beispiel
t1:
id
1
2
3
4
t2:
id attid attval
1 1 12
1 3 23
2 1 22
2 2 11
2 3 756
3 2 33
3 3 54
Im Ergebnis bei festgeletem Wert (attid) = 2:
1 NULL
2 11
3 33
4 NULL
Der Left Join hat zur Folge, daß Du alle Datensätze von t1
siehst. Damit wäre es fast fertig, nur willst Du alle attvals,
die ungleich ‚Wert‘ sind, zu NULL konvertieren - das machst Du
Nein, s.o.
mit dem
Ausdruck if(strcmp(b.attval, ‚Wert‘), ‚Wert‘, null). Fertig!
Das liefert doch aber alle Zeilen aus t2 mit id. Also auch die „falschen“ attid’s. Wenn ich da statt attval attid prüfe, habe ich im Ergebnis für eine id mehrere Zeilen, im schlimmsten Fall ein paar mit null und eine mit dem richtigen Wert. Alle mit null kann ich aber nicht wegwerfen, sonst habe ich da gleich wieder den Fall, das id’s fehlen. im Ergebnis soll id ja wieder Schlüssel und eindeutig sein.
Das geht auch ohne IN:
select a.id, b.attval
from t1 a, t2 b
where a.id=b.id
and b.attid=wert
… ok, alle mit dem Wert
union
select a.id, NULL
from t1 a, t2 b
where a.id=b.id
and b.attid wert
Das gibt zuviel, da es in t2 eben mehrere Zeilen (id, attid) geben kann, und ich hier nur die will, die in Tabelle 2 keinen Eintrag (id,attid=Wert) haben.
Das wert liefert aber alle Zeilen zurück, die eine andere attid haben, das sind viel zu viele.
union
select a.id, NULL
from t1 a left outer join t2 b
on a.id = b.id
and b.attid is null;
Ist nie null, Nullwerte gibt’s in der Spalte nicht.
Die meiner Meinung nach etwas unelegante Lösung
Nun, ob dieses zweite Konstrukt elegant ist, sei mal
dahingestellt 
Ich kann mich nur nicht wirklich mit der temp. Tabelle anfreunden. So läuft es zumindest und macht, was es soll.
Ohne temp. Tabelle wäre es mir aber lieber. Ich hatte leider noch nicht die Möglichkeit, dies mit einer größeren Anzahl von Datensätzen hinsichtlich der Geschwindigkeit zu testen.
Alexander