我遇到了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次。我做错了什么?
感谢您的任何建议!
答案 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;