Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Mệnh đề WHERE được theo sau bởi JOIN

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'


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cột không xác định {0} trong mệnh đề trên

  2. Cách kết nối với MySQL bằng Node.js

  3. Cách tốt nhất để xóa các giá trị trùng lặp khỏi Bảng MySQL là gì?

  4. Sửa đổi truy vấn MySQL loại bỏ các bản sao

  5. Làm cách nào để lấy các thẻ phổ biến nhất tổng thể từ các bảng chuẩn hóa?