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

Nomor gratis pertama MySQL di antara nilai yang ada

SELECT data.sPort
FROM 
  ((SELECT (s.server_port + 1) sPort
  FROM pro_servers s
  LEFT JOIN pro_servers sp1 ON sp1.server_port = s.server_port + 1
  WHERE (sp1.server_port IS NULL)
  ORDER BY sPort)

  UNION ALL

  (SELECT s.server_port sPost
  FROM pro_servers s
   GROUP BY s.server_port
   HAVING COUNT(s.server_port) = SUM(s.server_deleted)
  ORDER BY sPort)) AS data
ORDER BY data.sPort
LIMIT 1

SqlFiddle:http://sqlfiddle.com/#!2/12ab1/2

Cara kerjanya

  1. Kiri Gabung pro_servers dengan pro_servers dengan server_port = server_port + 1 gabungkan kondisi dan ambil baris, di mana ada null di berikutnya Pelabuhan. Baris ini menunjukkan port pertama dari setiap celah. Id port dapat diambil sebagai server_port + 1 .

  2. Ambil semua port yang dihapus.

  3. Union 1. dan 2., pesan dengan server_port dan ambil yang pertama.

Ada satu asumsi untuk jawaban - port dengan angka terendah selalu diambil. Jika tidak benar, periksa port tersebut secara terpisah (atau tambahkan UNION ALL another lainnya ke kueri).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dapatkah `mysqlcheck` membantu saya menyelesaikan masalah basis data tanpa merusak basis data saya?

  2. Saya tidak dapat memulai server Mysql 5.6 karena TIMESTAMP dengan nilai DEFAULT implisit sudah usang Kesalahan?

  3. Membuat Aplikasi Web Dari Awal Menggunakan Python Flask dan MySQL:Bagian 2

  4. perintah mysql tidak sinkron saat menjalankan penyisipan dari seledri

  5. ORDER BY datetime membuat kueri sangat lambat