2013-02-28 107 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