2010-03-12 8 views
0

Je dois créer une table temporaire, puis ajouter un nouveau champ int NOT NULL AUTO_INCREMENT pour que je puisse utiliser le nouveau champ comme numéro de ligne. Quel est le problème avec ma requête?Comment modifier une table temporaire?

SELECT post, newid FROM ((SELECT post`test_posts`) temp 
ALTER TABLE temp ADD COLUMN newid int NOT NULL AUTO_INCREMENT) 

modifier:

SELECT post, newid FROM ((SELECT post, newid as int NOT NULL AUTO_INCREMENT FROM `test_posts`) temp 

Cela n'a pas l'éther.

+0

Quel moteur DB? Quelle erreur? – gbn

+0

myphpadmin # 1064 - Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'int NOT NULL AUTO_INCREMENT FROM' test_posts') temp 'à la ligne 1 – William

Répondre

1

Cela ne signifie pas que c'est impossible, mais je n'ai vu aucune version de SQL qui vous permettra de modifier une table depuis un SELECT. Tirez la table alter et faites-en une déclaration séparée. Après avoir résolu les problèmes de syntaxe, vous devriez être bon.

De plus, il ne semble pas que vous ayez une "table temporaire" à modifier. Vous cherchez plutôt une solution qui vous permettra d'ajouter un identifiant arbitraire au résultat de votre requête "SELECT post ...". Je ne sais pas quel moteur vous utilisez, mais un compteur de séquence, rowid, rownum ou d'autres fonctionnalités similaires répondraient mieux à vos besoins.

0

Si vous avez besoin d'un numéro de ligne et que vous ne voulez pas créer de table temporaire, vous pouvez le faire en utilisant des variables utilisateur.

SET @my_row_num =0; 
SELECT @my_row_num := @my_row_num+1 as row_number, post, newid FROM ((SELECT post`test_posts`) temp;