Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

कैसे जांचें कि वर्तमान पंक्ति SQL क्वेरी में अंतिम चयनित पंक्ति है या नहीं?

  1. आपको ORDER BY निर्दिष्ट करना होगा पंक्तियों की कुछ छँटाई को परिभाषित करने के लिए।
  2. मेरा मानना ​​​​है कि MySQL के लिए किसी भी समाधान का प्रभावी ढंग से मतलब होगा कि आपकी क्वेरी को कम से कम दो बार निष्पादित किया गया है, इसलिए क्लाइंट पर इसे करना वास्तव में बेहतर है।

यदि आप एक ही क्वेरी को दो बार चलाने के साथ ठीक हैं, तो ऐसा कुछ करें।

पहले अंतिम पंक्ति की आईडी प्राप्त करें:

SELECT @LastID := ID 
FROM ... 
WHERE ... 
GROUP BY ...
ORDER BY ID DESC
LIMIT 1;

मुख्य प्रश्न में उस आईडी का प्रयोग करें:

SELECT * 
    , CASE WHEN ID = @LastID THEN FALSE ELSE TRUE END AS IsLast
FROM ... 
WHERE ... 
GROUP BY ...
ORDER BY ID ASC;

जैसा कि, सबसे अधिक संभावना है कि यदि इन दो प्रश्नों के चलने के दौरान तालिका को अपडेट किया जाता है तो यह टूट जाएगा (यदि आप इस समस्या को हल करने के लिए कुछ नहीं करते हैं, तो याद किया गया आईडी अंतिम नहीं बन सकता है, जब तक कि पंक्तियों को जोड़ा या हटा दिया जाता है)।

बेशक, आप सभी को एक प्रश्न में डाल सकते हैं:

SELECT 
    *, 
    CASE WHEN ID = LastID THEN FALSE ELSE TRUE END AS IsLast
FROM 
    YourTable
    CROSS JOIN 
    (
        SELECT ID AS LastID
        FROM YourTable
        ORDER BY ID DESC
        LIMIT 1
    ) AS TableLastID
ORDER BY ID ASC;

आपको यह जांचना होगा कि क्या MySQL आंतरिक SELECT LIMIT 1 को चलाने के लिए पर्याप्त स्मार्ट है या नहीं केवल एक बार या यह इसे मुख्य तालिका की प्रत्येक पंक्ति के लिए चलाएगा। फिर भी, सबसे अच्छी स्थिति में भी क्वेरी को प्रभावी ढंग से दो बार निष्पादित किया जाता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. बाएँ बाहरी जुड़ाव से लौटाए गए डिफ़ॉल्ट शून्य मानों को बदलें

  2. नेटिव टेबल 'performance_schema'।'???' गलत संरचना है

  3. केस असंवेदनशील फाइल सिस्टम के साथ MacOS पर MySQL केस सेंसिटिविटी टेबल का नाम

  4. mysql में यादृच्छिक पंक्तियों का चयन करें और प्रत्येक समूह के भीतर सीमित करें

  5. मैं MySQL में किसी विशेष पंक्ति की ऑफ़सेट कैसे प्राप्त कर सकता हूं?