Pouvez-vous définir “littérale” des tables dans SQL?
Est-il une sous-requête SQL syntaxe qui permet de définir, littéralement, une table temporaire?
Par exemple, quelque chose comme
SELECT
MAX(count) AS max,
COUNT(*) AS count
FROM
(
(1 AS id, 7 AS count),
(2, 6),
(3, 13),
(4, 12),
(5, 9)
) AS mytable
INNER JOIN someothertable ON someothertable.id=mytable.id
Cela épargnerait d'avoir à faire deux ou trois requêtes: création de la table temporaire, d'avoir les données en elle, puis de l'utiliser dans une jointure.
Je suis de l'utilisation de MySQL, mais serait intéressé à d'autres bases de données qui pourrait faire quelque chose comme ça.
Vous devez vous connecter pour publier un commentaire.
Je suppose que vous pourriez faire une sous-requête avec plusieurs
SELECT
s combiné avecUNION
s.Vous pouvez le faire dans PostgreSQL:
http://www.postgresql.org/docs/8.2/static/sql-values.html
Dans le standard SQL (SQL 2003 - voir http://savage.net.au/SQL/), vous pouvez utiliser:
Avec un peu plus de chasser, vous pouvez également utiliser:
Si ces travaux dans MySQL est une question distincte, mais vous pouvez toujours demander à ajouter, ou ajouter vous-même (c'est la beauté de l'Open Source).
TABLE
et que cela fonctionne avec MS SQL Server 2008 et probablement au-dessus.Dans Microsoft T-SQL 2008, le format est:
I. e. comme Jonathan mentionné ci-dessus, mais sans la "table" mot-clé.
Voir:
J'ai trouvé ce lien Les Tables Temporaires Avec MySQL
CRÉER une TABLE TEMPORAIRE ( ID int, Nom char(100) ) SELECT ....
Lire plus : http://dev.mysql.com/doc/refman/5.0/en/create-table.html
( près du fond )
Ceci a l'avantage que si il n'y a aucun problème de remplissage de la table ( incompatibilité de type de données ) la table est automatiquement abandonnée.
Un début de réponse utilisé un DE clause SELECT. Utiliser si possible que parce qu'il enregistre les maux de tête de nettoyage de la table.
Inconvénient ( qui ne peut pas d'importance ) avec le SELECT est quelle est la taille de l'ensemble de données créée. Une table temporaire permet d'indexation qui peut être critique. Pour la suite de la requête. Semble contre-intuitif, mais même avec une taille moyenne de l'ensemble de données ( ~1000 lignes), il peut être plus rapide à avoir un indice créé pour la requête à opérer.
En un mot, oui. Encore mieux IMO si votre SQL produit prend en charge les expressions de table communes (expressions de table communes) c'est à dire plus facile sur l'oeil que d'utiliser une sous-requête avec la même expression de table commune peut être utilisée plusieurs fois, par exemple, cette "création" d'une séquence de table unique d'entiers compris entre 0 et 999 dans SQL Server 2005 et au-dessus:
sauf vous fait faire quelque chose d'utile avec la Séquence de la table par exemple, analyser les caractères à partir d'une colonne de type VARCHAR dans une table de base.
TOUTEFOIS, si vous êtes en utilisant ce tableau, qui se compose uniquement de valeurs littérales, en plusieurs fois ou en plusieurs requêtes alors pourquoi ne pas en faire une table de base en premier lieu? Chaque base de données que j'utilise a une Séquence tableau d'entiers (généralement de 100 lignes), car il est si utile en général.