2016-02-10 2 views
0

J'ai la requête MySQL suivante:Erreur de syntaxe sur LEFT OUTER JOIN

SELECT w1.Id 
FROM Wills w1 LEFT OUTER JOIN Wills w2 
WHERE w1.Id = w2.Id + 1 
AND w1.Tmp > w2.Tmp 

Avec la requête, je veux comparer les lignes avec Id adjacentes s. Je veux sélectionner ceux qui ont un plus grand champ Tmp que leur prédécesseur.

Cependant, je reçois l'erreur suivante:

Runtime Error Message: 
Line 3: SyntaxError: near 'WHERE w1.Id = w2.Id + 1 
AND w1.Tmp > w2.Tmp' 

Je n'ai pas beaucoup d'expérience avec SQL et MySQL. Ai-je fait la jointure de manière incorrecte?

+0

Comment pouvez-vous garantir que les identifiants sont contigus? – Strawberry

Répondre

1

Vous manquez la ON clause:

SELECT w1.Id 
FROM Wills w1 LEFT OUTER JOIN Wills w2 ON w1.Id = w2.Id + 1 
and w1.Tmp > w2.Tmp 
1

Vous besoin de mettre les conditions dans la clause ON plutôt qu'une clause WHERE:

SELECT w1.Id 
FROM Wills w1 LEFT OUTER JOIN 
    Wills w2 
    ON w1.Id = w2.Id + 1 AND w1.Tmp > w2.Tmp; 

Si l'état est dans le WHERE, alors le LEFT JOIN sera transformé en INNER JOIN.