mysql - 哪种方法更好地连接 mysql 表?

标签 mysql join

这两种从多个表中选择数据的方法有什么区别。第一个不使用 JOIN 而第二个使用。首选哪种方法?

方法一:

SELECT t1.a, t1.b, t2.c, t2.d, t3.e, t3.f
  FROM table1 t1, table2 t2, table3 t3
 WHERE t1.id = t2.id
   AND t2.id = t3.id
   AND t3.id = x

方法二:

SELECT t1.a, t1.b, t2.c, t2.d, t3.e, t3.f
FROM `table1` t1
JOIN `table2` t2 ON t1.id = t2.id
JOIN `table3` t3 ON t1.id = t3.id
WHERE t1.id = x

最佳答案

对于您的简单情况,它们是等效的。即使方法 #1 中不存在“JOIN”关键字,它仍在进行连接。

但是,方法 #2 提供了灵 active ,允许在 JOIN 条件中使用无法通过 WHERE 子句实现的额外条件。例如当您对同一个表执行别名多重联接时。

select a.id, b.id, c.id
from sometable A
left join othertable as b on a.id=b.a_id and some_condition_in_othertable
left join othertable as c on a.id=c.a_id and other_condition_in_othertable

将两个额外条件放在 where 子句中会导致查询不返回任何内容,因为两个条件在 where 子句中不能同时为真,但在连接中是可能的。

关于mysql - 哪种方法更好地连接 mysql 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5779158/

相关文章:

php - Yii 上的 FindAll,字段名称无效

使用桥接表的 mySQL JOIN 语法

php - 选择 "joined"表中匹配特定数据和/或不存在数据的条目

sql - ARel 模仿包含 find_by_sql

sql - 在我的 SQL 查询中,如何才能有一列包含从另一个表查询的值?

javascript - Ajax "Is there new content? If so, update page"- 如何在不破坏服务器的情况下执行此操作?

php - 使用准备好的语句获取 "wrong parameter count..."错误

python - 查找三个 DataFrame 中是否存在复合键,并相应地连接 DataFrame

MySQL - 一对一的关系?

Mysql:连接翻译记录表