Mysql
 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 है अगले . में बंदरगाह। ये पंक्तियाँ हर गैप से पहले पोर्ट दिखाती हैं। पोर्ट आईडी को server_port + 1 . के रूप में लिया जा सकता है ।

  2. सभी हटाए गए पोर्ट लें।

  3. संघ 1. और 2., server_port द्वारा आदेश दें और पहला ले लो।

उत्तर के लिए एक धारणा है - सबसे कम संख्या वाला पोर्ट हमेशा लिया जाता है। यदि यह सत्य नहीं है, तो उस पोर्ट को अलग से जांचें (या कोई अन्य UNION ALL जोड़ें) क्वेरी के लिए)।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सबक्वायरी के साथ यह SQL क्वेरी बहुत धीमी क्यों है?

  2. JQuery KeyUp लाइव सर्च। कैसे करें?

  3. एक mysql डेटाबेस में लिखने और संग्रहीत करने के लिए बाहरी HD का उपयोग करना

  4. बहुआयामी सरणी को MySQL तालिका में कैसे डाला जाए?

  5. मैं दूरस्थ डेटाबेस तक पासवर्ड-रहित पहुँच के लिए रेल को कैसे कॉन्फ़िगर करूँ?