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
Sådan fungerer det
-
Venstre Deltag i
pro_servers
medpro_servers
medserver_port = server_port + 1
join condition og tag rækker, hvor der ernull
i den næste Havn. Disse rækker viser de første porte fra hvert hul. Port-id'et kan tages somserver_port + 1
. -
Tag alle slettede porte.
-
Union 1. og 2., bestilles efter
server_port
og tag den første.
Der er én antagelse for et svar - port med det laveste tal tages altid. Hvis det ikke er sandt, skal du kontrollere den port separat (eller tilføje en anden UNION ALL
til forespørgslen).