Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Migrasi kueri Firebird ke MySQL - Pilih Subkueri Gabung Dalam

Masalahnya adalah di mySQL operator koma memiliki prioritas yang lebih rendah daripada join operator, maka product inner join (subquery) on part.id = highestcost.partid inner join (subquery) on part.id = lowestcost.partid gabungan dievaluasi sebelum part tabel bergabung dalam ekspresi, maka pesan kesalahannya.

Ganti operator koma dengan join sederhana operator dan pindahkan kondisi bergabung dari where klausa ke on klausa dan semua akan baik-baik saja:

...
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 

Jika Anda memiliki lebih banyak kueri seperti itu di mana Anda mencampur operator koma dan gabungan eksplisit, maka Anda harus memeriksanya karena mereka dapat menghasilkan hasil yang berbeda meskipun tidak ada kesalahan sintaks di 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. urutan sql yang rumit oleh

  2. Bagaimana cara memeriksa apakah kueri MySQL menggunakan API lama berhasil?

  3. Bagaimana cara menyimpan banyak nilai dalam satu kolom di mana menggunakan lebih sedikit memori?

  4. Bagaimana cara mendapatkan nama kolom di Laravel 4?

  5. Mengenkripsi Lalu Lintas MySQL Dalam Skrip