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

MYSQL कम से कम डेटा के साथ डुप्लिकेट पंक्ति को हटा दें और हटा दें

आप इस DELETE क्वेरी का उपयोग कर सकते हैं, जो सामान्य है और अधिक क्षेत्रों का समर्थन करने के लिए इसे आसानी से अनुकूलित किया जा सकता है:

DELETE tablename.*
FROM
  tablename LEFT JOIN (
    SELECT MIN(id) min_id
    FROM
      tablename t INNER JOIN (
        SELECT
          emails, MAX((name IS NOT NULL) + (surname IS NOT NULL)) max_non_nulls
        FROM
          tablename
        GROUP BY
          emails) m
      ON t.emails=m.emails
         AND ((t.name IS NOT NULL) + (t.surname IS NOT NULL))=m.max_non_nulls
    GROUP BY
      t.emails) ids
  ON tablename.id=ids.min_id
WHERE
  ids.min_id IS NULL

कृपया फिडल देखें यहां

यह क्वेरी प्रत्येक ईमेल के लिए अधिकतम संख्या में गैर-शून्य फ़ील्ड लौटाती है:

SELECT
  emails,
  MAX((name IS NOT NULL) + (surname IS NOT NULL)) max_non_nulls
FROM
  tablename
GROUP BY
  emails

फिर मैं इस क्वेरी को टैबलेटनाम के साथ जोड़ रहा हूं, प्रत्येक ईमेल के लिए न्यूनतम आईडी प्राप्त करने के लिए जिसमें अधिकतम संख्या में गैर-शून्य फ़ील्ड हैं:

SELECT MIN(id) min_id
FROM
  tablename t INNER JOIN (
    SELECT
      emails, MAX((name IS NOT NULL) + (surname IS NOT NULL)) max_non_nulls
    FROM
      tablename
    GROUP BY
      emails) m
  ON t.emails=m.emails
     AND ((t.name IS NOT NULL) + (t.surname IS NOT NULL))=m.max_non_nulls
GROUP BY
  t.emails

और फिर मैं उन सभी पंक्तियों को हटा रहा हूं जिनमें एक आईडी है जो इस क्वेरी द्वारा वापस नहीं की गई है।



  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. Laravel . के साथ विदेशी कुंजी द्वारा सभी रिकॉर्ड कैसे प्राप्त करें

  3. महंगी क्वेरी डेटाबेस सर्वर को नीचे ले जाती है - कम करने के तरीकों की तलाश

  4. php में स्ट्रिंग को MySQL टाइमस्टैम्प प्रारूप में कनवर्ट करना

  5. MySQL से चिपके रहने के 10 कारण