在限制为1的查询中使用依赖查询是一个错误的操作吗?

lhcgjxsq  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(188)

我读了很多关于 Dependent Query 不好,我应该用 JOIN s、 我有一个将许多表连接在一起的代码,如下所示

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

在这种情况下,我是否使用最容易阅读和编辑的 Dependent Query ,还是我只是坚持 JOIN 什么?

bkhjykvo

bkhjykvo1#

我读了很多书,说使用依赖查询是不好的,我应该使用连接,
这是误导。当然, JOIN 他们是非常强大的,不应该气馁。sql优化器理解 JOIN 而且它们非常强大,易于阅读。
这并不意味着相关子查询是错误的。例如,即使从性能的Angular 来看,如果你有一个索引,你的也很好 tablee(id, e) . 实际上,这可能是编写查询的最佳方式。使用 join 可能会产生类似的执行计划。
如果你真的用了 join ,你需要一个 left 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 . . .

相关问题