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

MySQL क्वेरी में डुप्लिकेट परिणाम छुपाएं

हमेशा एक रास्ता होता है। सवाल यह है कि "क्या हमें ऐसा करना चाहिए"। नोट ऐसा करके आप ब्रांड डेटा छुपाते हैं। यदि डेटा को फिर से क्रमित किया जाता है, क्रमबद्ध किया जाता है, तो सॉर्टर यह जानने की क्षमता खो देता है कि कौन सा ब्रांड किस पंक्ति के लिए है। यदि यह केवल एक मुद्रित रिपोर्ट है जिसका सहारा नहीं लिया जाना है या एक पीडीएफ से अपेक्षित नहीं है जहां उपयोगकर्ता डेटा में हेरफेर नहीं कर सकता है तो ठीक है .. लेकिन यदि ऐसा है तो उपयोगकर्ता बाद में एक्सेल और हेरफेर करने के लिए डंप कर सकता है ... बेहतर है सभी डेटा।

मुझे व्यक्तिगत रूप से इलेक्ट्रॉनिक डेटा पर जानकारी का यह प्रदर्शन अरुचिकर लगता है, लेकिन मुद्रित रूपों या स्थिर रिपोर्ट पर ठीक है। कारण:इलेक्ट्रॉनिक पर मैं एक्सेल सॉर्ट में आयात करने और डेटा के साथ खेलने में सक्षम हूं; लेकिन अगर कॉलम में अनावश्यक डेटा "गायब" है तो इलेक्ट्रॉनिक हेरफेर समस्याग्रस्त हो जाता है।

SQLfiddle पर काम करना

CREATE Table foo (
 brand varchar(20),
 description varchar(20),
 prodcode varchar(20));


Insert into foo values ('Brand1', 'Description1', 'Product1'),
('Brand1', 'Description2', 'Product2'),
('Brand1', 'Description3', 'Product4'),
('Brand2', 'Description3', 'Product4'),
('Brand2', 'Description3', 'Product4'),
('Brand1', 'Description3', 'Product3');

प्रश्न:

SELECT case [email protected] <> f.brand then @Var :=brand end as Brand
     , f.description
     , f.prodcode
FROM (SELECT * FROM foo ORDER BY brand, description, prodcode) f
CROSS JOIN  (SELECT @var := '') b

परिणाम:

Brand   description     prodcode
Brand1  Description1    Product1
(null)  Description2    Product2
(null)  Description3    Product3
(null)  Description3    Product4
Brand2  Description3    Product4
(null)  Description3    Product4

यह क्यों काम करता है:

जादू क्रॉस जॉइन और केस मूल्यांकन में होता है।

1 टेबल है। हम शामिल होने से पहले रिकॉर्ड्स को सॉर्ट कर रहे हैं। हम @var नामक एक यूजर वेरिएबल बना रहे हैं और इसे टेबल फू में पहले रिकॉर्ड पर '' पर सेट कर रहे हैं। फिर हम पहले रिकॉर्ड के ब्रांड को @var असाइन करते हैं। जब SQL क्रॉस 2 दर्ज @var से जुड़ता है तो अब पहले रिकॉर्ड का ब्रांड है। यदि ब्रांड मेल खाते हैं, तो कोई रिकॉर्ड प्रदर्शित नहीं होता है, यदि ब्रांड मेल नहीं खाते हैं, तो हम @var का मान बदलते हैं और नया मान प्रदर्शित करते हैं।

जोखिम:

  • अगर अन्य टेबल जॉइन होते हैं, या ऑर्डर टेबल में वांछित नहीं है, तो हमें ब्रांड द्वारा ऑर्डर करने के लिए पहले "फू" पर एक सबक्वेरी करने की आवश्यकता होगी
  • इसके द्वारा किसी भी आदेश को लागू करना जिसमें ब्रांड 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. अनुक्रमित कॉलम पर MySQL क्वेरी IN () खंड धीमा

  2. SQL केवल कॉलम पर अधिकतम मान वाली पंक्तियों का चयन करता है

  3. XAMPP PHP/MySQL के साथ वास्तव में धीरे-धीरे चल रहा है

  4. MySQLi ने स्टेटमेंट एरर रिपोर्टिंग तैयार की

  5. एक Sql डेटाबेस से सरल यादृच्छिक नमूने