mysql - SQL - LEFT JOIN 条目时间

标签 mysql sql

我在使用 SQL 时遇到了问题,但我并没有真正弄清楚自己做错了什么。我有两个表,想用表 2 中的一个条目替换表 1。这工作正常,但需要时间。澄清一下,Table1 有 20 个条目,Table2 也有,但我的输出有 400 个条目。所以每次输入20次。

所以这就是我想要做的:

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

通常有 20 个条目,但现在 2 个就足够了。

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

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

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 次。我做错了什么?

感谢您的任何建议!

最佳答案

永远不要FROM 子句中使用逗号。 始终使用正确、明确的 JOIN 语法。

试试这个:

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

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

关于mysql - SQL - LEFT JOIN 条目时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41872446/

相关文章:

mysql - 如何克隆表中的所有记录,同时向记录名称添加字符串并递增记录 ID

PHP:似乎无法使用 MySQL 查询日期

c# - 从 SQL Server 获取列名

mysql - 时间相关字段的数据库设计

存储在 UTC 中的 SQL DateTimes 根据偏移量获取一天的开始

javascript - 带有图表的数据表查询

php - 单击表格行以加载新表格

sql - Oracle SQL 中的 NLS 字符串是什么?

MySQL,如何根据特定日期选择行?

WHERE 子句中的 mysql SUM()