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
Hoe het werkt
-
Links deelnemen aan
pro_servers
metpro_servers
metserver_port = server_port + 1
voeg de voorwaarde toe en neem rijen, waarnull
. is in de volgende haven. Deze rijen tonen de eerste poorten van elke opening. De poort-ID kan worden genomen alsserver_port + 1
. -
Neem alle verwijderde poorten.
-
Union 1. en 2., bestellen op
server_port
en neem de eerste.
Er is één aanname voor een antwoord - poort met het laagste nummer wordt altijd genomen. Als het niet waar is, controleer die poort dan apart (of voeg een andere UNION ALL
toe) op de vraag).