2012-08-03 9 views
7

के साथ चयन करें क्या आप अगली ऑरैकल एसक्यूएल क्वेरी के साथ मेरी मदद कर सकते हैं।ओरेकल subquery

SELECT "NEWS"."NEWSID" as ID, 
     "NEWS"."SLUG", 
     "NEWS_TRANSLATION".*, 
     (SELECT FILENAME FROM NEWS_MEDIA WHERE NEWSID = ID AND rownum <= 1 ORDER BY POSITION ASC) as FILENAME 
FROM "NEWS" 
INNER JOIN "NEWS_TRANSLATION" ON NEWS.NEWSID = NEWS_TRANSLATION.NEWSID 
WHERE (NEWS.PUBLISH = 1) AND (NEWS_TRANSLATION.LANG = :lang) 
ORDER BY "NEWS"."NEWSID" DESC; 

जब मैं इस क्वेरी निष्पादित मैं त्रुटि

ORA-00907: missing right parenthesis 
00907. 00000 - "missing right parenthesis" 
*Cause:  
*Action: 
Error at Line: 4 Column: 74 
+1

यदि इरादा news_media से समाचार वस्तु के लिए MIN स्थिति का फ़ाइल नाम प्राप्त करना है, तो मुझे नहीं लगता कि राउनम का सही ढंग से उपयोग किया जा रहा है। एक रिकॉर्ड का चयन करने के बाद "ऑर्डर बाय" लागू किया जा रहा है। इसे कम करने की आवश्यकता होगी या बेहतर, अभी भी MIN (स्थिति) के साथ अलग से शामिल हो जाना चाहिए। देखें http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html – Glenn

उत्तर

9

इस प्रयास करें: जब आप उपयोग कर रहे हैं कर रहे हैं

SELECT "NEWS"."NEWSID" as ID, 
    "NEWS"."SLUG", 
    "NEWS_TRANSLATION".*, 
    (SELECT * FROM (SELECT FILENAME FROM NEWS_MEDIA WHERE NEWSID = ID ORDER BY POSITION ASC) WHERE rownum = 1) as FILENAME 
FROM "NEWS" 
INNER JOIN "NEWS_TRANSLATION" ON NEWS.NEWSID = NEWS_TRANSLATION.NEWSID 
WHERE (NEWS.PUBLISH = 1) AND (NEWS_TRANSLATION.LANG = :lang) 
ORDER BY "NEWS"."NEWSID" DESC; 

"आदेश से" और " राउनम "एक साथ, आपको पहले उन्हें ऑर्डर करने और पहले रिकॉर्ड की तलाश करने की आवश्यकता है।

1

उप क्वेरी में खंड द्वारा आदेश निकाल कर प्रयास करें।

+0

कोशिश की, लेकिन मुझे एक ही त्रुटि है। – rtyshyk

+0

NEWS_MEDIA से FILENAME चुनें जहां समाचार आईडी = राउनम <= 1; मुझे कॉलम नाम आईडी के बारे में निश्चित नहीं है, कृपया इसकी भी पुष्टि करें। – TechDo

1

यहाँ कोड काम कर रहा है:

SELECT "NEWS"."NEWSID" as ID, 
    "NEWS"."SLUG", 
    "NEWS_TRANSLATION".*, 
    (SELECT FILENAME FROM NEWS_MEDIA WHERE NEWSID = ID AND rownum <= 1) as FILENAME 
FROM "NEWS" 
INNER JOIN "NEWS_TRANSLATION" ON NEWS.NEWSID = NEWS_TRANSLATION.NEWSID 
WHERE (NEWS.PUBLISH = 1) AND (NEWS_TRANSLATION.LANG = :lang) 
ORDER BY "NEWS"."NEWSID" DESC 
+0

वही 'लाइन में त्रुटि: 4 कॉलम: 51' – rtyshyk

+0

मैंने आईडी को न्यूज़ में बदल दिया। सबकुरी में सबएसआईडीआईडी ​​और सभी अच्छे काम करते हैं। लेकिन मैं इसे ऑर्डर के साथ कैसे कर सकता हूं? – rtyshyk

+0

आप 'ऑर्डर बाय' द्वारा क्या दिखाना चाहते हैं? क्या यह आपके प्रश्न में स्थिति ASC' भाग द्वारा आदेश दिया गया है? – Mistu4u

1

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

SELECT "NEWS"."NEWSID" AS ID, "NEWS"."SLUG", "NEWS_TRANSLATION".*, 
     (SELECT FILENAME 
      FROM NEWS_MEDIA 
     WHERE NEWSID = "NEWS"."NEWSID" AND ROWNUM <= 1) 
      AS FILENAME 
    FROM  "NEWS" 
     INNER JOIN 
      "NEWS_TRANSLATION" 
     ON NEWS.NEWSID = NEWS_TRANSLATION.NEWSID 
WHERE (NEWS.PUBLISH = 1) AND (NEWS_TRANSLATION.LANG = :LANG) 
ORDER BY "NEWS"."NEWSID" DESC 
+0

का उपयोग करता हूं जब आपका सबक्वायरी मुख्य क्वेरी में केवल एक मान फ़ोरैच रिकॉर्ड देता है, तो आप subquery सॉर्ट करने की कोशिश क्यों कर रहे हैं ?? – hmmftg

+0

मैं यहाँ http://stackoverflow.com/questions/11794242/oracle-select-with-subquery#comment15674817_11796362 – rtyshyk

+0

@Pivasyk अपने प्रश्न के लिए जवाब देने के मेरे सवाल यह है: सबक्वेरी में छँटाई के उद्देश्य क्या है? – hmmftg

-2
SELECT STUDENT_NAME, STUDENT_ALIAS_NAME 
FROM school 
WHERE STUDENT_NAME IN (
     SELECT STUDENT_NAME 
     FROM school 
     WHERE STUDENT_DEPARMENT= 0 
     ); 
+0

हालांकि यह प्रश्न का उत्तर दे सकता है, कृपया अपने कोड को स्पष्टीकरण के साथ बैक अप लें कि यह क्यों काम करेगा और यह अन्य उत्तरों की तुलना में बेहतर क्यों है। –