Mysql 使用“选择左联接”插入

Mysql 使用“选择左联接”插入,mysql,Mysql,我有一个查询,在我尝试将结果插入一个新表之前,它的执行情况很好。在到处搜索和改变了一些与我最初的查询没有多大区别的东西之后,我希望这里的人能弄清楚到底发生了什么 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 NUL

我有一个查询,在我尝试将结果插入一个新表之前,它的执行情况很好。在到处搜索和改变了一些与我最初的查询没有多大区别的东西之后,我希望这里的人能弄清楚到底发生了什么

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一样,这显然会从表2中删除任何匹配的值。正如我所说,在不使用INSERT语句的情况下运行此查询将返回准确的结果。有什么想法吗?

为什么不

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)
您的索引将不存在,但这看起来像是基于左连接的摘要表…

为什么不

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)

您的索引将不在那里,但这看起来像是一个基于左连接的摘要表…

为什么要在col1上进行左连接,然后使
WHERE
成为
t2。col1不为NULL
?这会生成与常规联接相同的集合。@Sebas这很尴尬,但是的,这就是问题所在。谢谢你让我看这个。可以发誓它们是相同的。@dnagirl我检查t2.col1是否为null,以排除t1.col和t2之间不匹配的任何记录。col@dnagirl感谢您指出它与常规联接具有相同的功能-我没有想到这一点。为什么您要在col1上进行左联接,然后将
置于
的位置
t2.col1不是空的
?这会生成与常规联接相同的集合。@Sebas这很尴尬,但是的,这就是问题所在。谢谢你让我看这个。可以发誓它们是相同的。@dnagirl我检查t2.col1是否为null,以排除t1.col和t2之间不匹配的任何记录。col@dnagirl感谢您指出它与常规联接具有相同的功能—我没有想到这一点。我不知道这样可以创建表。我没有索引,所以在这方面没有问题。这将保留匹配的列类型,并更改不匹配的列类型以符合新数据。因为这解决了Sebas在上面的评论中指出的问题,也教会了我一些新的东西,所以你被接受了。谢谢你的帮助!我不知道这样可以创建一个表。我没有索引,所以在这方面没有问题。这将保留匹配的列类型,并更改不匹配的列类型以符合新数据。因为这解决了Sebas在上面的评论中指出的问题,也教会了我一些新的东西,所以你被接受了。谢谢你的帮助!