2013-07-17 7 views
5

में शामिल हो गया है, मैं एक प्रश्न में बाएं शामिल होने की कोशिश कर रहा हूं, लेकिन ऐसा लगता है कि मैं कहीं गलत हूं।एसक्यूएल सर्वर

table machines 
-------------- 
machineID 
FaNo 
Barcode 
RoutingCode 
Name 


table log 
------------- 
logID 
lineBarcode 
machineBarcode 

लॉग तालिका में मशीनों और रेखाओं पर रिकॉर्ड हैं। एक पंक्ति पर एक ही प्रकार से कई अलग-अलग मशीनें और मशीनें हो सकती हैं।
मशीन का प्रकार routingCode है, इसलिए मुझे लाइन में सभी मशीनों को चुनने और उन्हें समूहित करने में रूचि है। अलग-अलग routingCode वाली मशीनों को अलग-अलग प्रदर्शित करना चाहिए, और मैं हर प्रकार की मशीनों की गिनती प्राप्त करना चाहता हूं।
यह इस तरह से किया जाता है।

SELECT routingcode, name, count(1) 
FROM machines 
JOIN log ON log.machinebarcode = machines.barcode 
WHERE log.linebarcode = 100000000001 
GROUP BY routingcode, name 

ठीक है सब कुछ सुचारू रूप से चलाता है, लेकिन इस तरह से मैं केवल मशीनों जो log तालिका में से संबंधित हैं और linebarcode के अनुसार रिकॉर्ड है मिलता है।
मुझे लगता है कि अगर मैं LEFT JOIN लॉग तालिका में हूं तो मुझे machines तालिका से सभी मशीनें मिलेंगी और उन्हें प्रदर्शित करें और निश्चित रूप से केवल log तालिका में पाए जाने वाली मशीनें उचित count होगी, लेकिन नहीं।
मैं कहां गलत कर रहा हूं और उचित कार्यवाही कैसे ढूंढूं?

उत्तर

4

आपको पर on खंड में where पर शर्त लगाने की आवश्यकता है। बाएं बाहरी जुड़ने से संरक्षित गैर मिलान पंक्तियां log में सभी कॉलम के लिए शून्य हो जाएंगी।

NULL के साथ log.linebarcode के साथ पंक्तियों को फिर से हटा दिया जाएगा यदि स्थिति where में है।

इसके अलावा COUNT(1) के बजाय आप log से एक स्तंभ है कि नहीं होगा गिनती करने की आवश्यकता है NULL

SELECT routingcode, 
     name, 
     count(log.linebarcode) 
FROM machines 
     LEFT JOIN log 
     ON log.machinebarcode = machines.barcode 
      AND log.linebarcode = 100000000001 
GROUP BY routingcode, 
      name 
+0

धन्यवाद! मुझे नहीं पता था कि मैं शामिल होने पर कई स्थितियां डाल सकता हूं। :) –

-1

यह आप diff मशीन नाम अर्थात routingcode देने के लिए और गिनती

SELECT distinct name, routingcode, count(1) 
FROM machines 
JOIN log ON log.machinebarcode = machines.barcode 
WHERE log.linebarcode = 100000000001 
GROUP BY routingcode, name 
+0

एक व्यर्थ 'विशिष्ट' और कॉलम पुनर्गठन के अलावा यह मूल प्रश्न में क्या है जैसा ही है। –

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