Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL số ​​miễn phí đầu tiên giữa các giá trị tồn tại

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

Cách hoạt động

  1. Tham gia trái pro_servers với pro_servers với server_port = server_port + 1 nối điều kiện và lấy các hàng, trong đó có null trong tiếp theo Hải cảng. Các hàng này hiển thị các cổng đầu tiên từ mọi khoảng trống. Id cổng có thể được lấy là server_port + 1 .

  2. Lấy tất cả các cổng đã xóa.

  3. Union 1. và 2., đặt hàng theo server_port và lấy cái đầu tiên.

Có một giả định cho một câu trả lời - cổng có số thấp nhất luôn được sử dụng. Nếu không đúng, hãy kiểm tra cổng đó một cách riêng biệt (hoặc thêm một UNION ALL khác cho truy vấn).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL 5.6 - bảng khóa ngay cả khi ALGORITHM =inplace được sử dụng

  2. Kích hoạt MySql, cập nhật bảng khác trên chèn

  3. Tại sao các tham chiếu đến wp_postmeta quá chậm?

  4. quyền truy cập bị từ chối đối với người dùng @ 'localhost' vào cơ sở dữ liệu ''

  5. Làm cách nào để tính số lượng khách truy cập vào trang web của tôi?