एक्स से कई मानों के बराबर कहां से चयन करें?

मैं कुछ कोड डीबग कर रहा हूं और निम्नलिखित SQL क्वेरी (सरलीकृत संस्करण) का सामना करना पड़ा है:

SELECT ads.*, location.county 
FROM ads
LEFT JOIN location ON location.county = ads.county_id
WHERE ads.published = 1 
AND ads.type = 13
AND ads.county_id = 2
OR ads.county_id = 5
OR ads.county_id = 7
OR ads.county_id = 9

मुझे क्वेरी से बहुत अजीब परिणाम मिल रहे हैं और मुझे लगता है कि यह पहला है या इससे पहले और पाए जाने वाले ऑपरेटरों को नकार रहा है।

इसके परिणामस्वरूप सभी प्रकार के विज्ञापनों के लिए नतीजे वापस आते हैं न कि केवल 13 प्रकार के लिए।

प्रत्येक बार जब क्वेरी कहा जाता है वहां काउंटी इकाइयों की एक अलग मात्रा हो सकती है जिसे देखने की आवश्यकता होती है।

इस बारे में जाने के सही तरीके पर कोई भी मदद की सराहना की जाएगी।

0

3 उत्तर

आप यह सुनिश्चित करने के लिए OR क्वेरी के चारों ओर कोष्ठक का उपयोग करने का प्रयास कर सकते हैं कि आपकी क्वेरी का सही ढंग से व्याख्या किया गया हो, या अधिक संक्षेप में, इन का उपयोग करें:

SELECT ads.*, location.county 
FROM ads
LEFT JOIN location ON location.county = ads.county_id
WHERE ads.published = 1 
AND ads.type = 13
AND ads.county_id IN (2,5,7,9)
0
जोड़ा

"OR" के आस-पास कोष्ठक रखें:

SELECT ads.*, location.county 
FROM ads
LEFT JOIN location ON location.county = ads.county_id
WHERE ads.published = 1 
AND ads.type = 13
AND
(
    ads.county_id = 2
    OR ads.county_id = 5
    OR ads.county_id = 7
    OR ads.county_id = 9
)

या इससे भी बेहतर, इन का उपयोग करें:

SELECT ads.*, location.county 
FROM ads
LEFT JOIN location ON location.county = ads.county_id
WHERE ads.published = 1 
AND ads.type = 13
AND ads.county_id IN (2, 5, 7, 9)
0
जोड़ा
यह कम से कम MySQL पर काफी तेज़ है
जोड़ा लेखक warren, स्रोत
मेरे मामले में IN के मान किसी अन्य चयन क्वेरी के परिणाम से आ रहे हैं, मैं इसे कैसे संभाल सकता हूं?
जोड़ा लेखक Parag Kadam, स्रोत
मुझे लगता है कि आईएन संस्करण पढ़ने में आसान है और अप्रत्याशित परिणामों को वापस करने की संभावना कम है।
जोड़ा लेखक DOK, स्रोत

और यहां तक ​​कि सरल का उपयोग कर इन:

SELECT ads.*, location.county 
  FROM ads
  LEFT JOIN location ON location.county = ads.county_id
  WHERE ads.published = 1 
        AND ads.type = 13
        AND ads.county_id IN (2,5,7,9)
0
जोड़ा