2013-02-28 133 views
0

我有一個執行得很好的查詢,直到我嘗試將結果插入到一個新表中。在全面搜索和改變這些與我原來的查詢沒有太大差別的東西之後,我希望有人能夠弄清楚發生了什麼。使用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表1,這顯然削減了任何匹配的值從表2新的表被填滿。正如我所說的,在沒有INSERT語句的情況下運行此查詢將返回準確的結果。有任何想法嗎?

+1

錯列類型? – Sebas 2013-02-28 18:24:46

+1

你爲什麼要在col1上進行左連接,然後讓'WHERE'成爲't2.col1 IS NOT NULL'?這會生成與常規連接相同的設置。 – dnagirl 2013-02-28 18:30:37

+0

@ Sebas這是令人尷尬的,但是,這是問題所在。感謝讓我看看。可以發誓他們是一樣的。 – Tim 2013-02-28 18:34:26

回答

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

不知道可以用這種方式創建表格。我沒有索引,所以在這方面沒有問題。這將保留匹配的列類型,並更改不符合新數據的列類型。既然這樣可以解決Sebas在上面評論中指出的問題,並且還教給我一些新的東西,那麼你就會被接受。感謝您的幫助! – Tim 2013-02-28 18:37:20

+0

隨時萌芽。歡呼:) – Hituptony 2013-02-28 18:44:49