2012-09-11 21 views
11

यहाँ मेरी कोड है में शामिल हों:MySql इनर साथ कहां खंड

SELECT table1.f_id FROM table1 WHERE table1.f_com_id = '430' AND  
table1.f_status = 'Submitted' 
INNER JOIN table2 
ON table2.f_id = table1.f_id 
where table2.f_type = 'InProcess' 

के रूप में प्रस्तुत और प्रकार केवल इस प्रक्रिया में जो संग्रहीत किया जाता है होना चाहिए मैं सभी f_com_id 430 के रूप में और स्थिति के साथ जुड़े आईडी के रूप में table1 से जानकारी की जरूरत है अन्य तालिका में (table2)

f_idp_key और दोनों तालिकाओं में f_key है।
लेकिन यह मुझे त्रुटियां दे रहा है, मुझे लगता है कि मैं WHERE क्लॉज गलत रख रहा हूं, इसे कैसे ठीक करें।

त्रुटि संदेश: # 1064 - आपको अपने SQL वाक्यविन्यास में कोई त्रुटि है; लाइन 2

+0

लगभग 80k विचार, प्रश्न पर 12 वोट और 25+ वोटों के साथ उत्तर। निश्चित रूप से भी स्थानीय नहीं है। – hims056

+0

एक बहुत ही लोकप्रिय वाक्यविन्यास त्रुटि, हां। संभवतः बहुत स्थानीयकृत नहीं है, लेकिन फिर भी विषय-वस्तु, अन्य वाक्यविन्यास त्रुटियों की तरह। –

उत्तर

26

हाँ तुम ठीक कह रहे पर जाँच मैनुअल है कि सही वाक्य रचना के पास का उपयोग करने के लिए अपने सर्वर संस्करण से मेल खाती है 'आंतरिक table2 शामिल हों table2.f_id पर ='। आपने WHERE क्लॉज गलत रखा है। आप केवल इसलिए इसी प्रकार अनेक स्थितियों के लिए AND कोशिश एक क्वेरी में एक WHERE खंड का उपयोग कर सकते हैं:

SELECT table1.f_id FROM table1 
    INNER JOIN table2 
    ON table2.f_id = table1.f_id 
WHERE table2.f_type = 'InProcess' 
    AND f_com_id = '430' 
    AND f_status = 'Submitted' 
+1

thnx बहुत..मैंने मेरे लिए काम किया .. लेकिन मुझे क्या लगता है जॉइन ऑपरेशन हमेशा एक महंगा दृष्टिकोण है, क्या हम इसे ओपेरियन में शामिल होने के बिना कुछ और तरीके से कर सकते हैं। अगर संभव हो तो? –

+1

@ आदित्य कुमार जुड़ें दूसरों की तुलना में बेहतर दृष्टिकोण है (उदा। उप-क्वेरी इत्यादि)। शामिल होना पसंद करें। [यह SQLFiddle] देखें (http://sqlfiddle.com/#!3/3db23/3)। – hims056

1

आप केवल एक ही जहां खंड लिख सकते हैं।

SELECT table1.f_id FROM table1 
INNER JOIN table2 
ON table2.f_id = table1.f_id 
where table1.f_com_id = '430' AND  
table1.f_status = 'Submitted' AND table2.f_type = 'InProcess' 
4


1. चेंज इनर कहां खंड से पहले शामिल हों।
2. आपके पास दो WHEREs हैं जिनकी अनुमति नहीं है।

इस प्रयास करें:

 
SELECT table1.f_id FROM table1 
    INNER JOIN table2 
    ON (table2.f_id = table1.f_id AND table2.f_type = 'InProcess') 
    WHERE table1.f_com_id = '430' AND table1.f_status = 'Submitted' 
-2

आप दो WHERE खंड का उपयोग कर रहे हैं, लेकिन केवल एक ही अनुमति दी है। इसे इस तरह प्रयोग करें:

SELECT table1.f_id FROM table1 
INNER JOIN table2 ON table2.f_id = table1.f_id 
WHERE 
    table1.f_com_id = '430' 
    AND table1.f_status = 'Submitted' 
    AND table2.f_type = 'InProcess'