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

Di chuyển truy vấn Firebird sang MySQL - Chọn Truy vấn con tham gia bên trong

Vấn đề là trong mySQL, toán tử dấu phẩy có mức độ ưu tiên thấp hơn hơn join toán tử, do đó, product inner join (subquery) on part.id = highestcost.partid inner join (subquery) on part.id = lowestcost.partid các liên kết được đánh giá trước phần part bảng được kết hợp trong biểu thức, do đó thông báo lỗi.

Thay thế các toán tử dấu phẩy bằng join đơn giản toán tử và di chuyển các điều kiện kết hợp từ where mệnh đề on các mệnh đề và tất cả sẽ ổn:

...
FROM   vendor
       inner join vendorparts on vendor.id = vendorparts.vendorid
       inner join part on vendorparts.partid = part.id
       inner join product on product.partid = part.id
       INNER JOIN (SELECT vendorparts.partid,
                          Max(vendorparts.lastcost) AS Highestcost
                   FROM   vendorparts
                   GROUP  BY vendorparts.partid) AS highestcost
               ON part.id = highestcost.partid
       INNER JOIN (SELECT vendorparts.partid,
                          Min(vendorparts.lastcost) AS Lowestcost
                   FROM   vendorparts
                   GROUP  BY vendorparts.partid) AS lowestcost
               ON part.id = lowestcost.partid
WHERE  vendorparts.lastcost <> 0 

Nếu bạn có nhiều truy vấn như vậy trong đó bạn kết hợp toán tử dấu phẩy và các phép nối rõ ràng, thì bạn nên kiểm tra chúng vì chúng có thể tạo ra các kết quả khác nhau ngay cả khi không có lỗi cú pháp trong MySQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để phân trang kết quả truy vấn cho Infinite Scroll?

  2. Tối ưu hóa truy vấn sử dụng chỉ mục MySQL

  3. MYSQL Chọn các hàng có ngày cũ hơn datetime

  4. Đá quý dm_mysql_adapter của Datamapper có được hỗ trợ trên windows không?

  5. Nhóm theo sẽ trả về 0 khi nhóm theo giờ. làm như thế nào?