2013-02-28 3 views
0

У меня есть запрос, который выполняется отлично, пока я не попытаюсь вставить результаты в новую таблицу. После обыска и изменения вещей здесь и там, которые на самом деле не сильно отличаются от моего первоначального запроса, я надеюсь, что кто-то здесь сможет понять, что происходит.INSERT, используя SELECT LEFT JOIN

INSERT INTO new_table(col1, col2, col3, col4) 
SELECT t1.col1, t2.col2, t1.col3, t1.col4 
FROM table1 t1 LEFT JOIN table2 t2 ON (t1.col1=t2.col1) 
WHERE (t2.col1 IS NOT NULL) 

Когда я запускаю этот запрос, новая таблица заполнена, как будто я только что сказал INSERT INTO new_table SELECT * FROM table1, который, очевидно, вырезает какой-либо из соответствующих значений из table2. Как я уже сказал, выполнение этого запроса без инструкции INSERT возвращает точные результаты. Есть идеи?

+1

неправильных типов столбцов? – Sebas

+1

Почему вы делаете левое соединение на col1, а затем создаете 'WHERE' be' t2.col1 IS NOT NULL'? Это генерирует тот же набор, что и регулярное соединение. – dnagirl

+0

@Sebas Это неловко, но да, это была проблема. Спасибо, что заставил меня взглянуть на это. Могли бы поклясться, что они были такими же. – Tim

ответ

3

почему не только

CREATE TABLE new_Table as SELECT t1.col1, t2.col2, t1.col3, t1.col4 
FROM table1 t1 LEFT JOIN table2 t2 ON (t1.col1=t2.col1) 
WHERE (t2.col1 IS NOT NULL) 

ваши индексы не будут, но это похоже на сводную таблицу на основе соединения слева ...

+0

Не знал, что таблица может быть создана таким образом. У меня не было индексов, поэтому на этом фронте проблем не было. Это сохраняет типы столбцов, которые соответствуют и изменяют те, которые не соответствуют новым данным. Поскольку это решает проблему, которую Себас указал в своем комментарии выше, а также научил меня чему-то новому, вас принимают. Спасибо вам за помощь! – Tim

+0

в любое время почка. ура :) – Hituptony