2012-03-15 6 views
9

मैं उत्पाद मात्राओं को उनके मात्राओं के साथ सूचीबद्ध करने की कोशिश कर रहा हूं, लेकिन उत्पाद विविधताएं भी दिखाएं जहां कोई मात्रा आदेश नहीं दिया गया है। तो मैंने सोचा कि यह उत्पादों का चयन करने और प्रत्येक उत्पाद के आदेश पर बाईं ओर शामिल होने के समान सरल होगा जहां ऑर्डर वर्तमान संशोधन है।माइस्क्ल बाएं/आंतरिक संयोजन संयोजन के रूप में काम नहीं कर रहा है

तो मैं आपरेशन के इस आदेश की तरह की उम्मीद:

SELECT p.product_id, SUM(po.quantity) 
FROM `products` p 
LEFT JOIN `product_orders` po ON p.product_id=po.product_id 
LEFT JOIN `orders` o ON o.order_id=po.order_id AND o.is_current='1' 

लेकिन यह है कि जहां is_current नहीं है 1 फिर मैंने सोचा, ठीक है, मैं तो बस कर सकते हैं छोड़ दिया के बाद एक आंतरिक में शामिल होने के भी मात्रा हो रही है इसके बजाय इसमें शामिल हों:

SELECT p.product_id, SUM(po.quantity) 
FROM `products` p 
LEFT JOIN `product_orders` po ON p.product_id=po.product_id 
INNER JOIN `orders` o ON o.order_id=po.order_id AND o.is_current='1' 

लेकिन फिर जिन उत्पादों को अभी तक आदेश नहीं दिया गया है उन्हें सूचीबद्ध नहीं किया जा रहा है। मुझे उम्मीद थी कि उन्हें एसयूएम (मात्रा) न्यूल के रूप में दिखाना होगा। क्या कोई देख सकता है कि मेरा तर्क गलत कहां गया है? धन्यवाद! स्कॉट

उत्तर

4

केवल उत्पाद आदेश है कि गिनती उन जहां यह वर्तमान है तो आप यदि आप बाईं करने के पहले उस सबसेट खोजने की जरूरत है, तो यह करने के लिए शामिल हो । अन्यथा यदि आप बाएं से जुड़ते हैं तो आप सभी को या केवल उन आदेशों को प्राप्त करें जिन्हें आपने खोजा है।

तो निम्नलिखित की तरह कुछ काम करना चाहिए:

select p.productid, sum(po.quantity) 
from products p 
left outer join (select po.productid, po.quantity 
         from productorders po 
         inner join orders o on o.orderid = po.orderid and o.iscurrent = 1) po on po.productid = p.productid 
group by p.productid 
+0

समझ में आता है, मैं इसे आज़माउंगा ... एक सेकंड – scott

+0

बिल्कुल सही काम करता है! ! वास्तव में क्या जरूरत थी। बहुत बहुत धन्यवाद! – scott

+0

कोई समस्या नहीं है। आप सही रास्ते पर थे; बस एक अतिरिक्त कदम – kaj

0

कोशिश अपने उत्पाद आईडी द्वारा समूहन:

SELECT p.product_id, SUM(po.quantity) 
FROM `products` p 
LEFT JOIN `product_orders` po ON p.product_id=po.product_id 
INNER JOIN `orders` o ON o.order_id=po.order_id AND o.is_current='1' 
GROUP BY p.product_id 
+0

धन्यवाद, अभी तक केवल उत्पादों है कि कम से कम मात्रा में एक (ताकि product_orders तालिका में प्रदर्शित होने) का आदेश दिया – scott

+0

अगर आप 'वाम JOIN' को' अंदरूनी JOIN' वापस बदलने के काम कर रहा यह है सूचीबद्ध करता है? – Alp

+0

हां क्वेरी तब काम करती है, लेकिन मुझे is_current के लिए सभी मात्राएं भी मिलती हैं! = '1' फिर (उसी क्रम के पुराने संशोधन) – scott

18

जबकि काज का जवाब सही है, यह जरूरी नहीं कि आदर्श है, के रूप में MySQL अनुक्रमित के उपयोग को छोड़ने के लिए जब व्युत्पन्न तालिकाओं (उप चयन) का उपयोग करता है। कम से कम, यह मेरी समझ है।

SELECT p.product_id, SUM(po.quantity) 
FROM `products` p 
LEFT JOIN (`product_orders` po 
    INNER JOIN `orders` o ON o.order_id=po.order_id AND o.is_current='1') 
ON p.product_id=po.product_id; 

बस याद रखें कि वाम के लिए पर खंड में शामिल हों जरूरतों कोष्टक बाद आने के लिए: आप कार्यभार संभाला का उपयोग कर के अपने पद्धति का उपयोग करने के लिए आप चाहें तो कोष्टक के भीतर मिलती जारी रख सकते हैं। आशा है कि ये आपकी मदद करेगा! उत्तर के लिए

+0

क्षमा करें, मैं अक्सर स्टैक ओवरफ्लो का उपयोग नहीं करता, और यह नहीं जानता कि कोड को अपने स्वयं के अनुभाग में कैसे रखा जाए। – Chosun

+0

मैं कभी-कभी इंडेक्स और उप-चयनों के संबंध में उत्कृष्ट बिंदु को देखता हूं। अच्छा स्पष्टीकरण। – mkralla11

+0

धन्यवाद! मैं करता हूं जो मैं कर सकता हूं ... हे। – Chosun

संबंधित मुद्दे