SQL - LEFT JOIN条目时间

时间:2017-01-26 11:27:31

标签: mysql sql

我遇到了SQL的问题而且我并没有真正理解我做错了什么。我有两个表,并希望在表1中替换表2中的一个条目。这很好,但它的时间。为了澄清,Table1有20个条目和Table2,但我的输出有400个条目。所以每次进入20次。

所以这就是我要做的事情:

Table1
|Name     |FullName  |Size      |
+---------+----------+----------+
|File1    |C:\File1  |8923749343|
|File2    |C:\File2  |3475873758|
+---------+----------+----------+

通常有二十个条目,但现在2应该就够了。

Table2
|FullName |CopyName  |Name      |
+---------+----------+----------+
|www\File1|C:\File1  |File1     |
|www\File2|C:\File2  |File2     |
+---------+----------+----------+

我现在的目标是从 Table2 而不是 Table1 获取带有 FullName Table1 。 我尝试了什么:

SELECT t1.Name, t2.FullName, t1.Size 
FROM Table1 t1, Table2 t2
LEFT JOIN Table1 ON Table1.FullName=Table2.CopyName;

这就是我得到的:

Table1
|Name     |FullName  |Size      |
+---------+----------+----------+
|File1    |www\File1 |8923749343|    
|File1    |www\File1 |8923749343|
|File2    |www\File2 |3475873758|
|File2    |www\File2 |3475873758|
+---------+----------+----------+

这就是我想要的:

Table1
|Name     |FullName  |Size      |
+---------+----------+----------+
|File1    |www\File1 |8923749343|
|File2    |www\File2 |3475873758|
+---------+----------+----------+

所以从技术上来说,我做对了,但出于某种原因,它是时间的。在这里我得到了两次,在我原来的尝试每次20次。我做错了什么?

感谢您的任何建议!

2 个答案:

答案 0 :(得分:2)

从不FROM子句中使用逗号。 始终使用正确的JOIN语法。

试试这个:

SELECT t1.Name, t2.FullName, t1.Size 
FROM Table2 t2 LEFT JOIN
     Table1 t1
     ON t1.FullName = t2.CopyName;

您的查询有两个Table1的引用。因此,您将获得它与您想要的实际JOIN之间的笛卡尔积。

答案 1 :(得分:2)

您应该从查询",表2 t2"

中删除该行
SELECT t1.Name, t2.FullName, t1.Size
FROM Table1 t1
LEFT JOIN Table2 t2 ON t2.CopyName=t1.FullName;