Tôi nghĩ rằng bạn nhầm cú pháp của SQL với luồng thực thi được thực hiện bởi công cụ RDBMS:truy vấn này
SELECT a,b FROM big b
LEFT JOIN (SELECT b as small_b,c,d FROM small) ON big.b=small.small_b
WHERE b.foo='bar'
sẽ được tối ưu hóa để chỉ thực hiện một phép nối với các hàng big
được lọc bởi foo='bar'
điều kiện, không phải trên toàn bộ big
, bởi bất kỳ trình tối ưu hóa truy vấn nào đáng giá, mặc dù thực tế là WHERE
mệnh đề xuất hiện dưới dạng văn bản sau JOIN
.
Bạn có thể muốn viết lại điều này mà không có SELECT
bên trong như thế này:
SELECT t1.a as big_a, t1.b as big_b, t2.b as small_b, t2.c, t2.d
FROM big t1
LEFT JOIN small t2 ON t1.b = t2.b
WHERE t1.foo='bar'