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

फ़ील्ड के बीच अंतर के लिए तालिका में पंक्तियों की तुलना करना

SQL में किसी भी व्यंजक को केवल एक पंक्ति में (उपश्रेणियों को छोड़कर) स्तंभों का संदर्भ देना चाहिए।

एक JOIN परिणाम सेट की एक पंक्ति में दो अलग-अलग पंक्तियों को बनाने के लिए इस्तेमाल किया जा सकता है।

तो आप सेल्फ़-जॉइन करके विभिन्न पंक्तियों के मानों की तुलना कर सकते हैं। यहां एक उदाहरण दिया गया है जो दिखाता है कि प्रत्येक पंक्ति को एक ही क्लाइंट से जुड़ी हर दूसरी पंक्ति से जोड़ा जाता है (एक पंक्ति को स्वयं से जोड़ने को छोड़कर):

SELECT c1.*, c2.*
FROM client c1
JOIN client c2 ON (c1.clientID = c2.clientID AND c1.id <> c2.id)

अब आप कॉलम की तुलना करने वाले भाव लिख सकते हैं। उदाहरण के लिए, उपरोक्त क्वेरी को उन तक सीमित करने के लिए जहां फ़ील्ड 1 भिन्न है:

SELECT c1.*, c2.*
FROM client c1
JOIN client c2 ON (c1.clientID = c2.clientID AND c1.id <> c2.id)
WHERE c1.field1 <> c2.field1;

आप यह निर्दिष्ट नहीं करते कि आपको किस प्रकार की तुलना करने की आवश्यकता है, इसलिए मैं इसे आप पर छोड़ता हूँ। मुख्य बिंदु यह है कि सामान्य तौर पर, आप किसी तालिका में पंक्तियों की तुलना करने के लिए सेल्फ-जॉइन का उपयोग कर सकते हैं।

अपनी टिप्पणियां और स्पष्टीकरण दें:ठीक है, तो आपका "अंतर" केवल मूल्य से नहीं बल्कि पंक्ति की क्रमिक स्थिति से है। याद रखें कि रिलेशनल डेटाबेस में पंक्ति संख्या की अवधारणा नहीं होती है, उनके पास केवल कुछ क्रम के संबंध में पंक्तियों का क्रम होता है जिसे आपको ORDER BY में निर्दिष्ट करना होगा। खंड। "id . को भ्रमित न करें "पंक्ति संख्या के साथ छद्मकी, संख्याओं को केवल उनके कार्यान्वयन के संयोग से एकरस रूप से बढ़ते हुए असाइन किया जाता है।

MySQL में, आप उपयोगकर्ता-परिभाषित चरों का लाभ उठा सकते हैं आप जिस प्रभाव की तलाश कर रहे हैं उसे प्राप्त करने के लिए। क्वेरी को clientId . द्वारा क्रमित करें और फिर id . द्वारा , और MySQL उपयोगकर्ता चर में प्रति कॉलम मान ट्रैक करें। जब वर्तमान पंक्ति का मान वैरिएबल के मान से भिन्न होता है, तो आप जो भी हाइलाइट करने जा रहे थे, वह करें। मैं एक फ़ील्ड के लिए एक उदाहरण दिखाऊंगा:

SET @clientid = -1, @field1 = '';
SELECT id, clientId, field1, @clientid, @field1,
  IF(@clientid <> clientid, 
    ((@clientid := clientid) AND (@field1 := field1)) = NULL,
    IF (@field1 <> field1, 
      (@field1 := field1), 
      NULL
    )
  ) AS field1_changed
FROM client c
ORDER BY clientId, id;

ध्यान दें कि यह समाधान वास्तव में केवल सादे SQL के साथ सभी पंक्तियों का चयन करने से अलग नहीं है, और जब आप पंक्तियाँ लाते हैं तो एप्लिकेशन चर के साथ मानों को ट्रैक करना।




  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 लोड डेटा:यह कमांड अभी तक तैयार स्टेटमेंट प्रोटोकॉल में समर्थित नहीं है

  2. MySQL [संग्रहीत प्रक्रिया] से [अस्थायी तालिका] में कैसे प्रवेश करें

  3. अरबी पाठ को MySQL डेटाबेस में सहेजें

  4. MySQL में वर्तमान तिथि कैसे प्राप्त करें

  5. MySQL MAX_JOIN_SIZE त्रुटियाँ