Ilja: INNER JOIN - zuviele Datensätze?

Beitrag lesen

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