SELECT внутри ALTER TABLE
SELECT column_name
FROM (SELECT *
FROM table_name) AS T
Если не добавить строчку " AS T ", то sql возвращает ошибку "Every derived table must have its own alias" мол каждая таблица должна иметь своё имя.
Вопрос, собственно, в следующем 1) Что делает строчка "AS T"? 2) почему такой же метод не проходит, когда я использую ALTER TABLE, код :
ALTER TABLE (
SELECT *
FROM table_name) AS T
ADD column_name datatype
Ув., kermenter, во первых, всегда указывайте СУБД, различные сервера, могут сильно различаться в требованиях.
Судя по тому, что есть тег phpmyadmin, я предполагаю что речь идет о MySQL (в котором я увы не спец, но тем не менее, что-то общее есть у всех СУБД).
AS T - это альяс. Альясы, существуют для того, чтобы ссылаться на любое отображение к таблице или выборки из нее. Вы когда альтерите, вы запрос альтерите? А если вы там напишете не звездочку а: Colum1*Colum2/Comun3, то что вам сервер должен изменить? Видимо по-этому, альясы не совместимы с DDL инструкциями. Зато вы их можете влегкую использовать в DML инструкциях. Просто примите это как факт. Альяс не означает ссылку на талицу напрямую, он означает ссылку на некое действие над таблицей, если оно совпадает полностью с таблицей - это просто частный случай. Это если объяснять упрощенно. Возможно в других субд это не так, но в MSSQL это так, и видимо в MySQL тоже.
Если речь действительно об MySQL, то почитайте про динамический SQL.
Выражения PREPARE и EXECUTE
http://dev.mysql.com/doc/refman/5.0/en/sql-syntax-prepared-statements.html