mysql - inner join和普通的多表选择有什么区别?

标签 mysql sql

我有两个问题:

SELECT m.id, m.name, f.type, c.id 
FROM main AS m, filter AS f, city AS c 
WHERE m.id = f.id AND c.name = m.city;

SELECT m.id, m.name, f.type, c.id 
FROM main AS m 
INNER JOIN filter as f ON m.id = f.id 
INNER JOIN city AS c ON c.name = m.city;

两者都应该给我相同的输出集。我为一小组值运行它们并且工作正常,但是当我为一组非常大的值运行它们时,两者都返回非常不同的行数(第一个返回 ~500K 行,而第二个返回 ~65K 行).这两个查询有什么区别吗?

[编辑]:

我正在使用 mysql 作为 RDBMS。

最佳答案

即使查询 #2 是推荐的标准。两个查询应返回相同的结果。

我的建议。比较那些分开的连接查询

SELECT m.id, m.name, f.type
FROM main AS m, filter AS f
WHERE m.id = f.id;

SELECT m.id, m.name, f.type
FROM main AS m 
INNER JOIN filter as f ON m.id = f.id;

然后

SELECT m.id, m.name, c.id 
FROM main AS m, city AS c 
WHERE c.name = m.city;

SELECT m.id, m.name, f.type, c.id 
FROM main AS m 
INNER JOIN city AS c ON c.name = m.city;

如果有任何不同,请告诉我们。 (应该没有)

关于mysql - inner join和普通的多表选择有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32158226/

相关文章:

MySql 工作台不响应本地服务器

mysql - 为什么我需要 6 个反斜杠才能在 MySQL 中使用 LIKE 搜索一个反斜杠?

带有 IF 条件的 MySQL JOIN

java - 在准备好的语句中使用 ORDER BY

php - 按第一个字符过滤列值?

php - when in 从句与 mysql pdo

SQL 导入/导出向导不允许创建表 #temp

sql - 如何在 Access 表中的文本字段前添加零

sql - 在 SQL 报告服务中直观地表示非规范化数据集

sql - SQL Server 中的 SUM 返回错误值