2016-06-15 10 views
0

Существует много ответов для вставок типа «где не существует», которые ожидают, что вы укажете столбцы для вставки. У меня более 400 столбцов, а две таблицы имеют одинаковую схему.Неизвестный столбец в разделе 'where not exists clause'

Существует также много ответов для неизвестного столбца, но не тот, который я могу найти во вставке, где не существует оператора. Я не могу понять проблему и надеюсь, что кто-то здесь может помочь.

Вот SQL скрипку http://sqlfiddle.com/#!9/70a34b/1

Вот один из нескольких запросов я пробовал:

INSERT INTO test1 
SELECT * FROM test2 b 
WHERE NOT EXISTS(SELECT * FROM test2 c WHERE test1.go = c.go); 

Я получаю ошибку Неизвестный столбца «test1.go» в «где предложение»

+3

Проблема здесь test1 не в объеме, как это часть вставки, а не часть избранных. 'INSERT INTO test1 SELECT * FROM test2 b WHERE b.go не в (Выберите переход из test1);' – xQbert

+0

@Ryan. Проверка backticks была первой, что я сделал, и это не проблема. Я бы не поставил вопрос, если бы я еще не провел час, проверяя его и создавая sqlfiddle. @ XQbert, вы правы, что это вне области видимости, но есть несколько столбцов, которые нужно сопоставить, чтобы исключить строка из вставки. Как вы можете это сделать и сопоставить несколько столбцов. У меня есть другие запросы, в которых я указываю столбцы для вставки, и он работает, но выбранное свойство * сохраняет это от работы, и я действительно не хочу вводить 408 имен столбцов в оператор select дважды. –

ответ

1

Просто переверните имена своих таблиц. Помните, что вы пытаетесь вставить в таблицу1 FROM table2, где значения еще не указаны в ТАБЛИЦА 1.

Изменить запрос на:

INSERT INTO test1 
SELECT * FROM test2 b 
WHERE NOT EXISTS(SELECT * FROM test1 c WHERE c.go = b.go);