webentwicklung-frage-antwort-db.com.de

MySQL "Unbekannte Spalte in On-Klausel"

Ich habe folgende MySQL-Abfrage:

SELECT posts.id,  posts.name,  LEFT(posts.content, 400),  posts.author,  posts.date, users.display_name,
  GROUP_CONCAT(tags.tag ORDER BY tag_linking.pid ASC SEPARATOR ",") update_tags
FROM posts, tag_linking, tags
INNER JOIN `users`
ON posts.author=users.id;
WHERE tag_linking.pid = posts.id 
  AND tags.id = tag_linking.tid 
ORDER BY posts.date DESC

Welches, was Sie sehen können, verbindet drei Tabellen usw. usw. Wie auch immer, das Problem ist, dass es einen Fehler gibt:

ERROR CODE:
SQL Error (1054): Unknown column 'posts.author' in 'on clause'

auch wenn diese einfachere Abfrage auf einer anderen Seite funktioniert:

SELECT posts.id,  posts.name,  LEFT(posts.content, 400),  posts.author,  posts.date, users.display_name FROM `posts`
INNER JOIN `users`
ON posts.author=users.id

Hat jemand Gedanken darüber, warum dies geschieht? Danke für Ihre Hilfe.

12
Connor Peet

weil deine mix join syntax

From Mysql[docs]

Der Kommaoperator hat jedoch eine geringere Priorität als INNER JOIN, CROSS JOIN, LEFT JOIN usw. Wenn Sie bei einer Join-Bedingung Komma-Joins mit den anderen Join-Typen mischen, kann ein Fehler der Form Unbekannte Spalte 'col_name' in 'on-Klausel' auftreten . Informationen zur Behebung dieses Problems finden Sie weiter unten in diesem Abschnitt.

die Lösung ist:

Gruppieren Sie die ersten beiden Tabellen explizit mit Klammern, damit der Join verarbeitet werden kann, sodass die Operanden für die ON-Klausel (t1, t2) und t3 sind:

SELECT * FROM (t1, t2) JOIN t3 ON (t1.i1 = t3.i3);

Alternativ , vermeiden Sie die Verwendung des Komma-Operators und verwenden Sie stattdessen JOIN:

SELECT * FROM t1 JOIN t2 JOIN t3 ON (t1.i1 = t3.i3);

39
Haim Evgi

ist es das Semikolon, das Sie haben ON posts.author=users.id;

1
Adam Sweeney

Wenn Sie Ihren Tabellen in der from-Klausel einen Alias ​​geben und sie in Klammern setzen, funktioniert dies. Das Mischen von Joins ist jedoch immer noch eine schlechte Praxis.

0
Subodh

Es heißt einfach, dass der Autor in der Post-Tabelle nicht existiert. entweder ein Rechtschreibfehler?

0
Falcon