sql >> Databáze >  >> RDS >> Mysql

První volné číslo MySQL mezi existujícími hodnotami

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

Jak to funguje

  1. Vlevo připojit pro_servers s pro_servers s server_port = server_port + 1 join podmínka a vzít řádky, kde je null v dalším přístav. Tyto řádky zobrazují první porty z každé mezery. ID portu lze vzít jako server_port + 1 .

  2. Vezměte všechny smazané porty.

  3. Union 1. a 2., seřaďte podle server_port a vezměte si první.

Pro odpověď je jeden předpoklad - vždy se bere port s nejnižším číslem. Pokud to není pravda, zkontrolujte tento port samostatně (nebo přidejte další UNION ALL na dotaz).



  1. Připojte se ke zdroji dat MySQL v PHPStorm

  2. Jak to převedu z TSQL na MYSQL?

  3. internacionalizovaný regulární výraz v postgresql

  4. Dotaz na výpočet součtu vzdálenosti (zeměpisná délka, šířka) v po sobě jdoucích řádcích v Mysql