mysql - 在 LIMIT 1 的查询中使用依赖查询是一个错误的操作吗?

标签 mysql sql

我读到很多内容,使用Dependent Query是不好的,我应该使用JOIN,我有一个将很多表连接在一起的代码,如下所示

SELECT a.a, b.b, c.c, d.d FROM
tablea a
JOIN tableb b ON a.id = b.id
JOIN tablec c ON a.id = c.id
JOIN tabled d ON a.id = d.id
WHERE a.id = 1
LIMIT 1

现在我可以使用依赖查询并使用 a.a 从另一个表中选择一个值,如下所示

SELECT a.a, b.b, c.c, d.d, (SELECT e FROM tablee WHERE id = a.a) AS e FROM
tablea a
JOIN tableb b ON a.id = b.id
JOIN tablec c ON a.id = c.id
JOIN tabled d ON a.id = d.id
WHERE a.id = 1
LIMIT 1

在这种情况下,我是否使用最容易阅读和编辑的相关查询,或者我只是坚持使用JOIN

最佳答案

I read a lot that using Dependent Query is bad and i should use JOINs,

这是误导。当然,JOIN 非常强大,不应该被气馁。 SQL 优化器理解 JOIN,它们非常强大且易于阅读。

这并不意味着相关子查询是错误的。例如,如果您在 tablee(id, e) 上有索引,即使从性能角度来看,您的索引也很好。事实上,这可能是编写查询的最佳方式。不过,使用 join 编写查询可能会生成类似的执行计划。

如果您确实使用了连接,则需要使用左连接来实现相同的语义。

在某些情况下,相关子查询在性能方面更好。确切的细节可能因数据库而异,因此不存在适用于所有数据库的“通用”规则。

我的一个非常强烈的建议是,当您在查询中引用多个表时,请限定所有列名称。所以,你应该写:

SELECT a.a, b.b, c.c, d.d,
       (SELECT e.e FROM tablee e WHERE e.id = a.a) AS e
FROM tablea a . . .

关于mysql - 在 LIMIT 1 的查询中使用依赖查询是一个错误的操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48121741/

相关文章:

java - 尽管执行的 SQL 返回值,但 Hibernate 返回空值列表

c# - 在 C# 中用文本更新图像后从数据库加载图像时参数无效

sql - 是否可以使用与外键连接的表中的数据更新行?

mysql - SQL语法错误,找不到?

Mysql 主键不按顺序排列

mysql - 如何并排连接两个表的结果?

php - 困境,在没有其他信息已知的情况下搜索散列字段

mysql - 你会认为这是一个自然的主键吗?

MySQL优化连接查询 "OR"条件

PHP/mySQL 和 Google map 地理编码