Maison >base de données >tutoriel mysql >Pourquoi le mélange de JOINS ANSI 1992 et de virgules dans les requêtes MySQL provoque-t-il des erreurs « Colonne inconnue » ?

Pourquoi le mélange de JOINS ANSI 1992 et de virgules dans les requêtes MySQL provoque-t-il des erreurs « Colonne inconnue » ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-09 11:06:41792parcourir

Why Does Mixing ANSI 1992 JOINs and Commas in MySQL Queries Cause

Problèmes causés par le mélange de JOIN ANSI 1992 et de virgules dans les requêtes MySQL

Dans une requête MySQL, si vous utilisez à la fois la syntaxe ANSI 1992 JOIN et la syntaxe de jointure de table délimitée par des virgules, une erreur « Colonne inconnue 'm.id' dans 'clause on' » peut se produire. En effet, le mélange des deux syntaxes peut conduire à une ambiguïté dans la syntaxe des requêtes.

Solution du problème

Selon la documentation MySQL, il n'est pas recommandé de mélanger une syntaxe de jointure de table basée sur des virgules (par exemple, members as m, telephone as t) avec des clauses JOIN explicites. Pour résoudre ce problème, remplacez les virgules par des instructions CROSS/INNER/LEFT JOIN.

Explication des raisons

Auparavant, l'opérateur virgule et JOIN avaient la même priorité, mais dans les versions plus récentes de MySQL, JOIN a une priorité plus élevée. Par conséquent, l’opérateur virgule n’a plus la priorité sur les clauses JOIN. Cela signifie que l'interpréteur de requêtes sépare incorrectement les opérandes, provoquant des erreurs dans la clause ON.

Requête modifiée

Pour corriger la syntaxe, réécrivez la requête en utilisant une clause JOIN explicite :

<code class="language-sql">SELECT m.*, t.*
FROM memebers AS m
JOIN telephone AS t ON m.id = t.member_id  -- 添加连接条件
JOIN memeberFunctions AS mf ON m.id = mf.memeber AND mf.function = 32
JOIN mitgliedTelephone AS mt ON m.id = mt.memeber;</code>

Autres notes

Notez que la requête modifiée suppose une jointure croisée entre m et t puisque vous n'avez spécifié aucun critère. Si nécessaire, vous devrez peut-être modifier la requête pour inclure les conditions de jointure appropriées. J'ai ajouté une condition de jointure hypothétique ON m.id = t.member_id à titre d'exemple, vous devrez modifier cette condition en fonction de la structure réelle de votre table de base de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn