2012-08-22 8 views
5

में वक्तव्य में शामिल हों मैं, निम्नलिखित है MySQL क्वेरी काम कर रहे:सशर्त MySQL

SELECT 
    a.id id, 
    a.price price, 
    a.stock stock, 
    a.max_per_user max_per_user, 
    a.purchased purchased, 
    b.quantity owned 
FROM 
    shop_items a 
     JOIN shop_inventory b 
      ON b.iid=a.id 
      AND b.cid=a.cid 
WHERE 
    a.cid=1 
    AND a.szbid=0 
    AND a.id IN(3,4) 

JOIN तालिका shop_inventory b मिलती b.quantity owned वापस जाने के लिए। हालांकि, अगर shop_inventory b तालिका में कोई रिकॉर्ड नहीं है, जहां b.iid=a.id मैं इसे b.quantity = 0 वापस लौटना चाहता हूं। यह मैं कैसे करूंगा?

उत्तर

9

उपयोग LEFT JOIN बजाय। और COALESCE कुछ रिकॉर्ड्स के बाद से जहां शून्य (मुझे लगता है)। कोशिश करें,

SELECT a.id id,a.price price,a.stock stock, 
     a.max_per_user max_per_user,a.purchased purchased, 
     COALESCE(b.quantity, 0) owned 
FROM shop_items a 
      LEFT JOIN shop_inventory b 
       ON b.iid=a.id AND b.cid=a.cid 
WHERE a.cid=1 AND 
     a.szbid=0 AND 
     a.id IN(3,4) 
+1

'COALESCE' के लिए +1। –

+0

धन्यवाद, बहुत सराहना की :) –

+1

धन्यवाद, मैंने थॉमस के 'ग्रुप बाय' के विचार को शामिल किया है, और व्यक्तिगत मात्राओं को जोड़ दिया है, और 'NULL' मानों के लिए आपके 'COALESCE' का उपयोग किया है :)। –

3

ऐसा कुछ ऐसा करना चाहिए।

SELECT a.id id,a.price price,a.stock stock, 
     a.max_per_user max_per_user,a.purchased purchased, 
     COUNT(b.quantity) AS owned 
FROM shop_items a 
      LEFT JOIN shop_inventory b 
       ON b.iid=a.id AND b.cid=a.cid 
WHERE a.cid=1 AND a.szbid=0 AND a.id IN(3,4) 
GROUP BY id 
+0

'GROUP BY' का उपयोग करने के विचार के लिए धन्यवाद, इसके बजाय' SUM (COALESCE (b.quantity, 0)) 'का उपयोग करके थोड़ा संशोधित किया गया है :)। –

+0

हाँ, एसयूएम (कैल्स()) शायद आपको जो चाहिए वह अधिक इनलाइन है। खुशी है कि विचार कुछ हद तक सहायक है। :-) – Thomas

3

आप एक JOIN के बजाय एक LEFT JOIN उपयोग करना चाहते हैं।

SELECT a.id id,a.price price,a.stock stock, 
     a.max_per_user max_per_user,a.purchased purchased, 
     b.quantity owned 
FROM shop_items a 
LEFT JOIN shop_inventory b ON b.iid=a.id AND b.cid=a.cid 
WHERE a.cid=1 AND a.szbid=0 AND a.id IN(3,4) 

यह b शून्य में फ़ील्ड्स बनाने अगर वे ON खंड से मेल नहीं खाते जाएगा।

आप इसे 0 होना चाहते हैं, तो आप उपयोग कर सकते हैं IFNULL

SELECT IFNULL(b.quantity, 0) owned 
2

यह होगा जहां वाम जुड़ें और समूह के आधार पर इस्तेमाल करते हैं। यदि आपको बस बी की वस्तुओं की गिनती है, तो वह है।

SELECT a.id id,a.price price,a.stock stock, 
     a.max_per_user max_per_user,a.purchased purchased, 
     COUNT(b.quantity owned) as quantity_owned 
FROM shop_items a 
      LEFT JOIN shop_inventory b 
       ON b.iid=a.id AND b.cid=a.cid 
WHERE a.cid=1 AND a.szbid=0 AND a.id IN(3,4) 
GROUP BY a.id 
संबंधित मुद्दे