Hallo Peter,
id | replaces_id | created | ...
----+-------------+------------+- - -
1 | NULL | 2005-03-04 |
2 | NULL | 2003-08-22 |
3 | 2 | 2006-05-05 |
4 | 2 | 2006-05-05 |
5 | 2 | 2006-06-06 | <unzulässig!>
6 | 3 | 2006-06-06 |replaces_id soll also created bedingen, aber mehrere Werte von replaces_id sollen schon je einen anderen Wert von created zulassen.
Deine Tabellenstruktur scheint mir ungünstig gewählt, dies bedingt Dein Problem. Du solltest vielleicht genauer erläutern, welche Bedeutung die Spalte created hat, mir entzieht sich diese. Wenn replaces_id nicht NULL ist, so hängt created direkt von replaces_id ab, deswegen solltest Du dies in einer eigenen Tabelle aufführen.
Mein Vorschlag wären zwei Tabellen:
id replaces_id created
---------------------------
1 NULL 2005-03-04
2 NULL 2003-08-22
3 2 NULL
4 2 NULL
5 2 NULL
6 3 NULL
replaces_id created
-----------------------
2 2006-05-05
3 2006-06-06
SELECT
id
t1.replaces_id
COALESCE(t1.created, t2.created) AS created
FROM Tabelle1 t1
LEFT JOIN Tabelle2 t2
ON t1.replaces_id = t2.replaces_id
liefert Dir Deine Ausgangstabelle mit korrektem created-Wert für id=5.
Wenn Du MySQL 5.0 und höher verwendest, so kannst Du aus meiner Abfrage einen View erstellen, der genau das Aussehen Deiner Ausgangstabelle hat.
Da Du InnoDB verwendest, kannst Du mit einem FOREIGN KEY-Constraint Deine Bedingung durchsetzen, die CHECK-Klausel wird von MySQL derzeit noch komplett ignoriert ...
Freundliche Grüße
Vinzenz