2010-02-19 9 views
5

बाद क्वेरी MySQL 5.x में अच्छी तरह से चलाता हैMySQL सबक्वेरी में शामिल होने के लिए असफल

SELECT 
    m_area.id, m_area.cn_areaName, m_area.de_areaName, 
    m_area.en_areaName,m_area.jp_areaName,t_shop.count 
FROM 
    m_area left join 
(
select t_shop.areaID, count(areaID) AS count 
from t_shop 
group by t_shop.areaID 
) t_shop 
on m_area.id = t_shop.areaID 

हालांकि, जब मैं एक ही DB संरचना और डेटा यह सिर्फ निम्न संदेश लौटने के साथ एक 4.0.23 MySQL DB में इसे चलाने के लिए है छोड़ दिया :

1064 - आपको अपने SQL वाक्यविन्यास में कोई त्रुटि है। मैनुअल है कि सही वाक्य रचना के पास का उपयोग करने के लिए अपने सर्वर संस्करण से मेल खाती है की जाँच करें '[

  select t_shop.areaID, count(areaID) AS count 
      from t_s 

मैं कई बार कोशिश की, लेकिन अभी भी विफल रहा है। MySQL 4.x में अनुमति नहीं है subquery में शामिल छोड़ दिया गया है? तो इसका मतलब है कि मुझे इसे एक अस्थायी तालिका के साथ करना है?

अग्रिम धन्यवाद!

उत्तर

1

बाहर ले ", (areaID) गिनती के रूप में गिनती"

सबक्वेरी में एकाधिक स्तंभों अप खिलवाड़ कर रहा है में शामिल हो।

एक temp तालिका ठीक काम करना चाहिए ....

मज़े करो!

+0

आप सही हैं मैं केवल temp टैब ड्रोप टेम्पलेटरी तालिका के साथ कर सकता हूं अगर temp_shop; टेम्पलेट टेबल temp_shop बनाएं (क्षेत्र आईडी int (11), गिनती int (11)); temp_shop में INSERT t_shop का चयन करें।areaID, t_shop.areaID द्वारा t_shop \t \t \t \t समूह से गिनती (areaID) गिनती \t \t \t \t के रूप में; चयन \t \t \t \t m_area.id, m_area.cn_areaName, m_area.de_areaName, \t \t \t \t m_area.en_areaName, m_area.jp_areaName, temp_shop.count \t \t \t \t से \t \t \t \t m_area में शामिल होने के लिए छोड़ दिया temp_shop \t \t \t \t m_area.id = temp_shop.areaID पर; कभी-कभी हमें कुछ पुरानी मशीनों के लिए कोड करना पड़ता है, जो बहुत दर्दनाक है। –

1

केवल एक चीज जो मैं सोच सकता हूं वह सबक्वायरी में आपके क्षेत्र आईडी में tablename जोड़ रहा है या आरक्षित शब्द count को cnt में नामित कर रहा है।

SELECT m_area.id 
     , m_area.cn_areaName 
     , m_area.de_areaName 
     , m_area.en_areaName 
     ,m_area.jp_areaName 
     ,t_shop.cnt 
FROM  m_area 
     left join ( 
      select  t_shop.areaID 
        , count(t_shop.areaID) AS cnt 
      from  t_shop 
      group by t_shop.areaID 
     ) t_shop on m_area.id = t_shop.areaID 
+0

आपकी टिप्पणी के लिए thx लेकिन यह अभी भी असफल रहा है –

4

सबक्वेरी काफी अच्छी तरह से नहीं MySQL 4.0 के साथ समर्थित गया: यह उन्हें उपयोग करने के लिए संभव हो गया (कम से कम, कुछ असली, उपयोगी तरीके से) MySQL 4.1 के साथ - और MySQL 4.0 अब वास्तव में पुराना है,। ..


उदाहरण के लिए देखें MySQL मैनुअल के इस पृष्ठ: 12.2.8. Subquery Syntax(के हवाले से, जोर मेरा):

MySQL 4.1 से शुरू होने वाले सभी सबक्वायरी फॉर्म और ऑपरेशंस जो SQL मानक आवश्यक हैं, के साथ-साथ कुछ विशेषताएं जो MySQL- विशिष्ट हैं।

MySQL संस्करण के साथ

4.1 करने से पहले, यह काम करने के लिए जरूरी हो गया था चारों ओर या सबक्वेरी के उपयोग से बचने।
में कई मामलों में, सबक्वायरी सफलतापूर्वक और अन्य विधियों का उपयोग करके पुनः लिखे जा सकते हैं। Section 12.2.8.11, “Rewriting Subqueries as Joins for Earlier MySQL Versions” देखें।

+0

जो लिंक आपने अनिवार्य रूप से प्रदान किया है वह कहता है कि आपके द्वारा उल्लिखित समस्या का समाधान क्या है ?! –

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