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)