2010-05-07 5 views
1

Текущая ситуация:INSERT INTO othertbl SELECT * TBL

INSERT INTO othertbl 
    SELECT * 
    FROM tbl  
    WHERE id = '1' 

Так я хочу, чтобы скопировать запись из ТПС в othertbl. Обе таблицы имеют уникальный индекс с автоинкрементами. Теперь новая запись должна иметь новый индекс, а не значение индекса исходной записи, иначе копирование приводит к индексу, а не уникальной ошибке.

Решение будет заключаться в том, чтобы не использовать *, но поскольку эти таблицы имеют довольно несколько столбцов, я действительно думаю, что он становится уродливым.

Итак, есть ли лучший способ скопировать запись, которая приведет к новой записи в othertbl, которая имеет новый индекс с автоинкрементами, без необходимости записывать все столбцы в запросе и использовать значение NULL для индекса.

-hope имеет смысл ....-

ответ

3

Подумайте, что вы собираетесь должны упасть * и указать столбцы Fella

+0

На практике, хотя это приводит к большим, уродливым заявлениям, вы все равно должны это делать, ИМО. Изменения в структуре с меньшей вероятностью превзойдут вас плохо. – DaveE

+0

Боялся: S О, хорошо. Я, вероятно, просто хочу, чтобы вещи двигались ИЛИ могли пойти на решение Ike Walkers, чтобы получить нужные имена столбцов и взять их оттуда. В любом случае, ребята! – Harry

0

Если вы используете SQL Server вы можете получить список колонны с использованием

SELECT column_name+', ' from INFORMATION_SCHEMA.COLUMNS where table_name = 'tbl'

Построение оператора вставки с использованием результата из сказанного выше должно быть легко.

+0

К сожалению, не заметил тег mysql. – Raj

+0

Не беспокойтесь. Вы имели в виду хорошо. Кроме того, Айк придумал аналогичное решение для mysql. Итак, спасибо вам обоим! – Harry

0

Вы можете вывести список без автоинкрементных столбцов для таблицы с этим запросом, а затем использовать его во вставке и выберите заявление:

SELECT group_concat(column_name) 
from INFORMATION_SCHEMA.COLUMNS 
where table_schema = 'myschema' 
and table_name = 'tbl' 
and extra != 'auto_increment'; 
+0

Just Wow! Я не думаю, что он заставит мой сценарий выглядеть лучше, но этот запрос на самом деле вызывает имена столбцов на лету: D – Harry

Смежные вопросы