我的一些同事一直在您可以简单地使用联接的地方使用子查询。利弊部分讨论in this SO post。
他们的大多数查询可以简化为以下模式:
SELECT T1.a, (SELECT T2.b FROM T2 WHERE T2.a = T1.a )
FROM T1
可以重写为:
SELECT T1.a, T2.b
FROM T1
LEFT JOIN T2
ON T1.a = T2.a
一些很棒的SOer可以给我一个例子,其中子查询可用于实现无法使用连接重写的算法吗?
背景故事:我发现JOIN更易于阅读和管理。使用子查询编写的SQL查询驱动我(我的潜意识)坚果!我试图找到一个不恨他们的理由!
答案 0 :(得分:1)
虽然您可以构造一个没有子查询的等效查询,但它比join
更复杂:
SELECT T1.a, (SELECT SUM(T2.b) FROM T2 WHERE T2.a <= T1.a )
FROM T1;