【发布时间】:2016-08-26 12:00:10
【问题描述】:
我遇到了以下 MySQL 代码:
SELECT ServiceFee
FROM Shows
WHERE ID = (SELECT ShowID FROM Orders WHERE ID = ?)
这让我感到奇怪,因为编写此代码的人通常使用 SQL 连接。我会重写它
SELECT ServiceFee
FROM Shows
INNER JOIN Orders ON Shows.ID = Orders.ShowID
WHERE Orders.ID = ?
我的问题:是否有任何理由为什么使用子查询编写此代码,以及使用连接重写它是否完全安全(在所有情况下产生相同的结果)?
有什么注意事项吗?
【问题讨论】:
-
@I_am_Batman - 该帖子适用于不同的数据库引擎
-
@TudorConstantin,同样的概念也适用,不是吗?
-
这取决于每个 db 实现了哪些类型的优化以及它们是如何实现的。在 MySQL 中有效的东西在 sql server 中可能有效,也可能无效,反之亦然