sql >> データベース >  >> RDS >> Mysql

存在する値の間のMySQLの最初の空き番号

    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

    仕組み

    1. 左結合pro_servers pro_serversを使用 server_port = server_port + 1を使用 条件を結合し、nullがある行を取得します 次の ポート。これらの行は、すべてのギャップからの最初のポートを示しています。ポートIDはserver_port + 1と見なすことができます 。

    2. 削除されたすべてのポートを取得します。

    3. ユニオン1.および2.、server_portで並べ替え 最初のものを取ります。

    答えには1つの仮定があります。つまり、番号が最も小さいポートが常に使用されます。そうでない場合は、そのポートを個別に確認してください(または別のUNION ALLを追加してください クエリに)。



    1. MySQLイベントスケジューリングのパフォーマンスへの影響

    2. アプリケーションはデータベースに接続します

    3. イベントスケジューラのステータスを確認する方法mysql

    4. 最大値を見つけて、SQLサーバーの別のフィールドから対応する値を表示します