SQLyog
 sql >> Teknologi Basis Data >  >> Database Tools >> SQLyog

SQL LIMIT menurut kolom id

Alih-alih membaca tabel layanan secara langsung, gunakan sub kueri dan gabung dengan itu.

select s.*, u.`fname`, u.`lname`, aif.`airport` FROM 
    ( select * from services order by id limit 2) as s INNER JOIN airports_in_flight aif
    ON s.`id` = aif.`service_id` INNER JOIN users u
    ON s.`service_provider_id` = u.`id`

Bergantung pada versi mysql Anda, Anda tidak dapat memiliki subquery IN menggunakan limit dan offset (Versi MySQL ini belum mendukung 'LIMIT &IN/ALL/ANY/SOME subquery') tetapi ini akan tetap berfungsi.

EDIT:

Jika Anda menyetel kueri dalam ke ini:

(SELECT s.id
FROM services s
INNER JOIN airports_in_flight aif
    ON s.`id` = aif.`service_id`
INNER JOIN users u
    ON s.`service_provider_id` = u.`id`
LIMIT 2)

Maka itu hanya akan mengembalikan layanan dengan airports_in_flight dan pengguna (mungkin menambahkan klausa berbeda).

EDIT untuk memperjelas:

Sekarang Anda memiliki ini sebagai pilihan Anda:

select s.*, u.`fname`, u.`lname`, aif.`airport` FROM 
        services as s INNER JOIN airports_in_flight aif
        ON s.`id` = aif.`service_id` INNER JOIN users u
        ON s.`service_provider_id` = u.`id`

Anda ingin membatasi hingga 2 layanan (saya tidak tahu apakah Anda menginginkan semua layanan, saya kira hanya layanan dengan pengguna yang cocok dan bandara dalam penerbangan), jadi Anda harus meletakkan batas di tabel yang tepat.

Dalam hal ini, tabel yang tepat adalah tabel layanan. Untuk mempermudah, mari kita mulai dengan versi sederhana dari apa yang Anda miliki:

SELECT s.*, aif.`airport` FROM 
        services as s 
INNER JOIN airports_in_flight aif ON s.`id` = aif.`service_id`

Saya akan membuat asumsi bahwa ada bandara di baris penerbangan untuk setiap layanan (kita dapat menambahkan kerumitan itu nanti).

Untuk membuat daftar 2 layanan pertama, kami menginginkan batasan pada layanan, bukan seluruh kueri, sehingga menjadi:

SELECT s.*, u.`fname`, u.`lname`, aif.`airport` FROM 
        (select * from services limit 2) as s 
INNER JOIN airports_in_flight aif ON s.`id` = aif.`service_id`

Perhatikan saya mengganti layanan tabel dengan kueri, yang sekarang dapat saya batasi, ini adalah subquery. Jika sekarang kita hanya ingin melihat layanan yang memiliki bandara dalam penerbangan, kita perlu mengubah subquery tersebut dari:

select * from services limit 2

ke

select ss.* from services ss 
inner join airports_in_flight aifs on ss.`in` = aifs.`service_id` limit 2

Saya telah mengganti nama layanan dan tabel airports_in_flight ss dan aifs sehingga mereka tidak bertabrakan dengan nama-nama dalam kueri utama, memasukkan gabungan dalam untuk membatasi baris saya hanya ke tabel layanan, dan dibatasi oleh 2, jadi masukkan subquery ke kueri yang sekarang kita dapatkan:

select s.*, u.`fname`, u.`lname`, aif.`airport` 
FROM 
  (select ss.* from services ss 
   inner join airports_in_flight aifs on ss.`in` = aifs.`service_id`
   limit 2) as s 
INNER JOIN airports_in_flight aif ON s.`id` = aif.`service_id`

Anda kemudian dapat memperluas subkueri untuk menambahkan gabungan dalam bagi pengguna (sehingga membatasi layanan hanya untuk layanan yang memiliki baris airports_in_flight dan baris pengguna), dan menambahkan tabel pengguna ke kueri utama.




  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. Bagaimana cara mengubah charset default dari tabel MySQL?

  2. Kesalahan No. 2058 Plugin authentication_windows_client tidak dapat dimuat:Modul yang ditentukan tidak dapat ditemukan

  3. Wait_timeout MySQL salah di SQLyog

  4. Di mana dalam spesifikasi yang relevan didokumentasikan bahwa beberapa komentar dalam skrip SQL, pada kenyataannya, dieksekusi sebagai SQL yang valid (oleh MySQL)?

  5. Mengimpor .sql ke MS Access menggunakan OBDC