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

MYSQL में जहां क्लॉज में मामला

तार्किक AND/OR . का उपयोग करके आप अपने दूसरे प्रयास के साथ सही रास्ते पर हैं CASE . के बजाय समूहीकरण , लेकिन अगर आप पसंद करना . करना चाहते हैं cmp_brand . से मेल खाने वाली पंक्ति एक खाली cmp_brand . के साथ पंक्तियों के ऊपर और केवल एक परिणाम की उम्मीद करें, अपने ORDER BY की संरचना करें गैर-रिक्त cmp_brand को सॉर्ट करने के लिए पहले, और समग्र परिणाम को 1 तक सीमित करें।

SELECT thumb 
FROM inf_brand_images 
WHERE
  is_active=1 AND 
  ((cmp_brand = '' AND brand='NIKE') OR (cmp_brand='123_NIKE'))
/* non-empty cmp_brand will sort first */
ORDER BY cmp_brand <> '' DESC
/* and the end result is limited only to the first sorted row
   which will be the cmp_brand if matched, or the brand otherwise */
LIMIT 1

http://sqlfiddle.com/#!2/d176b/2

यह काम करता है क्योंकि अभिव्यक्ति cmp_brand <> '' बूलियन का मूल्यांकन करता है true/false , जिसे MySQL 1/0 . के रूप में व्याख्या करता है . उन मानों पर एक अवरोही क्रम गैर-खाली लोगों को मुट्ठी सॉर्ट करने के लिए मजबूर करता है (1 से पहले 0)।

टिप्पणियों के बाद अपडेट करें:

चूंकि आपके पास एक से अधिक पंक्तियों के वापस आने की संभावना है, आप ORDER BY पर भरोसा नहीं कर सकते . इसके बजाय, आप एक LEFT JOIN कर सकते हैं उसी टेबल के खिलाफ एक तरफ, cmp_brand = '' . का मिलान करें और दूसरी तरफ मैच cmp_brand = '123_NIKE' . महत्वपूर्ण रूप से, thumb वापस करें दोनों . से कॉलम शामिल होने के पक्ष।

इसे FROM . में एक सबक्वेरी में लपेटें खंड, फिर शीर्ष स्तर पर आप एक SELECT CASE का उपयोग कर सकते हैं cmp_brand को प्राथमिकता देने के लिए अगर खाली नहीं है।

SELECT DISTINCT
  CASE WHEN cbcb IS NOT NULL THEN cbthumb ELSE bthumb END AS thumb
FROM (
  /* Return thumbs from both sides of the join */
  SELECT 
    b.thumb AS bthumb,
    b.cmp_brand AS bcb,
    cb.thumb AS cbthumb,
    cb.cmp_brand AS cbcb
  FROM
    inf_brand_images b
    /* join the table against itself with the matching cmp_brand in the join condition */
    LEFT JOIN inf_brand_images cb
      ON b.brand = cb.brand
      AND cb.cmp_brand = '123_NIKE'
  WHERE 
    /* The WHERE clause looks for empty cmp_brand on the left side of the join */
    b.brand = 'NIKE' AND b.cmp_brand = ''
) thumbs



  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. जब PHP वैरिएबल में सिंगल कोट्स होते हैं तो MySQL क्वेरी नहीं डाली जाती है

  3. SQLzoo जॉइन ट्यूटोरियल #13

  4. Mysql Concat दो कॉलम LIKE . के साथ खोजते समय

  5. BIRT में पैरामीटर इनपुट के बाद डेटा सेट क्वेरी को अपडेट करना