J'essaye d'utiliser MySQL pour créer une vue avec la clause "WITH"
WITH authorRating(aname, rating) AS
SELECT aname, AVG(quantity)
FROM book
GROUP BY aname
Mais il ne semble pas que MySQL le prenne en charge.
Je pensais que c'était assez standard et je suis sûr qu'Oracle prend en charge cela. Est-il possible de forcer MySQL à utiliser la clause "WITH"? Je l'ai essayé avec le moteur MyISAM et innoDB. Les deux ne fonctionnent pas.
Vous pourriez être intéressé par quelque chose comme ceci:
la source
Subquery
est le nom que j'ai utilisé pour la table dérivée elle-même. Lorsque vous utilisez,from ( ... )
vous créez quelque chose comme une table temporaire (une table dérivée) et cela nécessite un nom. C'est pourquoi j'ai utiliséas Subquery
. En réponse à votre question, oui, vous pouvez, mais vous devrez mettre un nom dans la table dérivée externe (juste avant leGroup By
). J'espère que cela a aidé.Vous avez la bonne syntaxe:
Cependant, comme d'autres l'ont mentionné, MySQL ne prend pas en charge cette commande. WITH a été ajouté dans SQL: 1999; la dernière version de la norme SQL est SQL: 2008. Vous pouvez trouver des informations supplémentaires sur les bases de données prenant en charge les différentes fonctionnalités de SQL: 1999 sur Wikipedia .
MySQL a traditionnellement pris un peu de retard dans la prise en charge de la norme SQL, tandis que les bases de données commerciales comme Oracle, SQL Server (récemment) et DB2 les ont suivies d'un peu plus près. PostgreSQL est généralement assez conforme aux normes.
Vous voudrez peut-être consulter la feuille de route de MySQL; Je ne sais pas exactement quand cette fonctionnalité pourrait être prise en charge, mais elle est idéale pour créer des requêtes cumulatives lisibles.
la source
Oracle prend en charge WITH.
Cela ressemblerait à ceci.
@ysth WITH est difficile à rechercher sur Google car c'est un mot courant généralement exclu des recherches.
Vous voudrez consulter les documents SELECT pour voir comment fonctionne l'affacturage des sous-requêtes.
Je sais que cela ne répond pas à l'OP mais je nettoie toute confusion que vous avez peut-être commencée.
la source
En vous basant sur la réponse de @Mosty Mostacho, voici comment vous pouvez faire quelque chose d'équivalent dans MySQL, pour un cas spécifique de détermination des entrées qui n'existent pas dans une table et ne se trouvent dans aucune autre base de données.
Vous souhaiterez peut-être utiliser un éditeur de texte avec des capacités de macro pour convertir une liste de valeurs en clause select union entre guillemets.
la source
MariaDB soutient désormais WITH. MySQL ne l'est pas pour l'instant. https://mariadb.com/kb/en/mariadb/with/
la source
la source
Avez-vous déjà essayé la table temporaire? Cela a résolu mon convern:
Ensuite, vous pouvez utiliser ce tableau dans chaque sélection de cette session:
la source