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

FIND_IN_SET () बनाम IN ()

SELECT  name
FROM    orders,company
WHERE   orderID = 1
        AND companyID IN (attachedCompanyIDs)

attachedCompanyIDs एक अदिश मान है जिसे INT . में डाला जाता है (companyID का प्रकार )।

कास्ट केवल पहले गैर-अंक (आपके मामले में एक अल्पविराम) तक की संख्या देता है।

इस प्रकार,

companyID IN ('1,2,3') ≡ companyID IN (CAST('1,2,3' AS INT)) ≡ companyID IN (1)

PostgreSQL में , आप स्ट्रिंग को सरणी में डाल सकते हैं (या इसे पहले स्थान पर एक सरणी के रूप में संग्रहीत कर सकते हैं):

SELECT  name
FROM    orders
JOIN    company
ON      companyID = ANY (('{' | attachedCompanyIDs | '}')::INT[])
WHERE   orderID = 1

और यह companyID . पर एक अनुक्रमणिका का भी उपयोग करेगा ।

दुर्भाग्य से, यह MySQL में काम नहीं करता है चूंकि बाद वाला सरणियों का समर्थन नहीं करता है।

आपको यह लेख दिलचस्प लग सकता है (देखें #2 ):

अपडेट करें:

यदि अल्पविराम से अलग की गई सूचियों में मानों की संख्या पर कुछ उचित सीमा है (जैसे, 5 से अधिक नहीं) ), ताकि आप इस क्वेरी का उपयोग करने का प्रयास कर सकें:

SELECT  name
FROM    orders
CROSS JOIN
        (
        SELECT  1 AS pos
        UNION ALL
        SELECT  2 AS pos
        UNION ALL
        SELECT  3 AS pos
        UNION ALL
        SELECT  4 AS pos
        UNION ALL
        SELECT  5 AS pos
        ) q
JOIN    company
ON      companyID = CAST(NULLIF(SUBSTRING_INDEX(attachedCompanyIDs, ',', -pos), SUBSTRING_INDEX(attachedCompanyIDs, ',', 1 - pos)) AS UNSIGNED)


  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 में पिछले 3 महीने का बिक्री डेटा कैसे प्राप्त करें

  2. एक स्ट्रिंग के हिस्से को बदलकर एक कॉलम मान अपडेट करें

  3. त्रुटि 1130 (HY000):होस्ट '' को इस MySQL सर्वर से कनेक्ट करने की अनुमति नहीं है

  4. MySQL में NULL को किसी भिन्न मान से बदलने के 4 तरीके

  5. MONTHNAME () उदाहरण – MySQL