Si vous essayez d'exécuter une requête comme la suivante (trouver tous les nœuds ayant au moins une pièce jointe) où vous avez utilisé une instruction SELECT pour créer un nouveau champ qui n'existe pas réellement dans la base de données, et que vous essayez d'utiliser l'alias pour ce résultat, vous rencontrerez le même problème :
SELECT nodes.*, (SELECT (COUNT(*) FROM attachments
WHERE attachments.nodeid = nodes.id) AS attachmentcount
FROM nodes
WHERE attachmentcount > 0;
Vous obtiendrez une erreur "Unknown column 'attachmentcount' in WHERE clause".
La solution est en fait assez simple - il suffit de remplacer l'alias par la déclaration qui produit l'alias, par exemple :
SELECT nodes.*, (SELECT (COUNT(*) FROM attachments
WHERE attachments.nodeid = nodes.id) AS attachmentcount
FROM nodes
WHERE (SELECT (COUNT(*) FROM attachments WHERE attachments.nodeid = nodes.id) > 0;
Vous obtiendrez toujours l'alias retourné, mais maintenant SQL ne devrait pas se planter sur l'alias inconnu.