moin,
ich vermute durch die fehlermeldung du benutzt mysql in welcher version ?
Eigentlich sind es mehrere Millionen Einträge.
wenn du nur die drei spalten haben willst, also keine unbekannte anzahl an spalten, dann geht das auch über die self joins. aber es ist unschön und bedarf einiger tricks.
SELECT daten1.lambda, daten1.messung, daten2.messung
FROM daten AS daten1
INNER JOIN daten AS daten2 ON daten1.lambda = daten2.lambda
INNER JOIN daten AS daten3 ON daten1.lambda = daten3.lambda
mal davon abgesehen, dass mir persönlich die aliasnamen zu lang wären, das AS überflüssig ist, ist dein code nicht optimal und fachlich falsch. es fehlt die selektion der einzelnen tabellen auf die messreihen. den zweiten join würde ich auch anders setzen und gegebenfalls noch ein DISTINCT spendieren.
.....
INNER JOIN daten AS daten3 ON daten3.lambda = daten2.lambda
WHERE daten1.messreihe = 2
AND daten2.messreihe = 3
daten3.messreihe = 5
viel besser würden sich aber korrelierte unterabfragen machen, wobei das erst ab mysql 4.1+ geht und dann auch nur, wenn du sicher stellen kannst, dass pro messreihe und lamda immer nur ein wert geliert wird.
SELECT d1.lambda, d1.messung
(SELECT d2.messung
FROM daten d2
WHERE d2.lambda = d1.lambda
AND d2.messreihe = 3
) Messung2,
(SELECT d23.messung
FROM daten d3
WHERE d3.lambda = d1.lambda
AND d3.messreihe = 5
) Messung3
FROM daten d1
WHERE d1.messreihe = 2
;
und noch eleganter finde ich eine gruppierung
SELECT d1.lambda,
MAX(CASE
WHEN d1.messreihe = 2
THEN d1.messung
ELSE NULL
) Messung1,
MAX(CASE
WHEN d1.messreihe = 3
THEN d1.messung
ELSE NULL
) Messung2,
MAX(CASE
WHEN d1.messreihe = 5
THEN d1.messung
ELSE NULL
) Messung3,
FROM daten d1
GROUP BY d1.lambda
Ilja