LEFT JOIN MEDICALTESTS m ON p.PlayerId = m.PlayerId
WHERE m.PassedMedical = 1
यह विरोधाभासी है। आप कह रहे हैं कि यह एक लेफ्ट जॉइन है, इसलिए मेडिकल रिकॉर्ड मौजूद नहीं होना चाहिए, लेकिन फिर कह रहे हैं कि रिकॉर्ड वास्तव में मौजूद होना चाहिए और पासमेडिकल के रूप में 1 होना चाहिए। तो आपका लेफ्ट जॉइन वास्तव में एक इनर जॉइन बन जाता है, और इसी तरह, चूंकि आपके पास एक MEDICALTESTS पंक्ति होनी चाहिए, आपके पास एक PLAYERS रो भी होनी चाहिए, ताकि यह भी एक इनर जॉइन बन जाए।
इसके बजाय इसे आजमाएं:
INNER JOIN MEDICALTESTS m ON p.PlayerId = m.PlayerId and m.PassedMedical = 1
सुनिश्चित नहीं है कि SQL सर्वर फू लेफ्ट जॉइन बार इनर जॉइन बाज़ से कैसे व्याख्या करता है ... आप इसे फू लेफ्ट जॉइन (बार इनर जॉइन बाज़) के रूप में व्याख्या करना चाहते हैं। यदि वह काम नहीं करता है, तो इसके बजाय उप-चयन का उपयोग करें; शामिल न हों, बस जोड़ें:
WHERE p.PlayerId IS NULL or (select PassedMedical from MEDICALTESTS m where m.PlayerId=p.PlayerID) = 1
आशा है कि यह SQL सर्वर के साथ मेरी परिचितता की कमी के बावजूद मदद करता है।