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
-
Kiri Gabung
pro_servers
denganpro_servers
denganserver_port = server_port + 1
gabungkan kondisi dan ambil baris, di mana adanull
di berikutnya Pelabuhan. Baris ini menunjukkan port pertama dari setiap celah. Id port dapat diambil sebagaiserver_port + 1
. -
Ambil semua port yang dihapus.
-
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).