2008-10-15 19 views
9

स्पष्ट रूप से निम्न गलत है।एक ही तालिका से एक सम्मिलित करें या अपडेट करें

INSERT INTO `aTable` (`A`,`B`) VALUES((SELECT MAX(`A`) FROM `aTable`)*2),'name'); 

मैं मूल्य प्राप्त:

SQL क्वेरी:

INSERT INTO `aTable` (`A`, `B`) 
VALUES 
(
    (
    SELECT MAX(`A`) 
    FROM `aTable` 
) *2 
, 'name' 
) 

MySQL ने कहा:

1093 - आप FROM खंड में अद्यतन के लिए लक्ष्य तालिका 'atable' निर्दिष्ट नहीं कर सकते

तो, मैं बिटमैप तालिका बनाने की कोशिश कर रहा हूं, प्रत्येक पंक्ति एक बिट से मेल खाती है, और इसमें 'मानचित्र' va है लुए।

तालिका में सम्मिलित करने के लिए, मैं दो प्रश्न नहीं करना चाहता, मैं एक करना चाहता हूं। मुझे यह कैसे करना चाहिए?

कोई भी इस पर टिप्पणी नहीं करता है, लेकिन चूंकि मैं बिटमैप बनाने की कोशिश कर रहा हूं, यह * 2 नहीं^2 होना चाहिए, मेरी गलती, कृपया ध्यान दें कि यही कारण है कि टिप्पणियां अक्सर^2 कहती हैं, यह एक त्रुटि थी संस्करण जो टिप्पणीकार पढ़ते हैं।

उत्तर

10

कोशिश:

insert into aTable select max(a)^2, 'name' from aTable; 

या

insert into aTable select max(a)^2, 'name' from aTable group by B; 

आप एक में शामिल होने की जरूरत है, तो आप ऐसा कर सकते हैं:

insert into aTable select max(a)^2, 'name' from aTable, bTable; 

मेरे "सर्वर संस्करण" है "5.0.51b- सामुदायिक-एनटी माईएसQL समुदाय संस्करण (जीपीएल) "

1

मुझे लगता है कि आपको "मूल्य" ड्रॉप करने की आवश्यकता है, और एक वैध चयन कथन है।

see this link

मैं नहीं कर रहा हूँ विशेष रूप से एक mySQL पुरुष, मैं MSSQL ज्यादातर का उपयोग करें। लेकिन अगर आप सही कथन सही तरीके से प्रारूपित करते हैं, तो इसे काम करना चाहिए।

+0

नहीं, मैं उसी तालिका से चयन करने की कोशिश कर रहा हूं, और MySQL को यह पसंद नहीं है .. सोरी, मैंने पहली बार सही ढंग से क्वेरी टाइप नहीं की थी, लेकिन चयन अभी भी सही था । –

+0

एचआरएम। ठीक है, क्या mySQL में उपयोगकर्ता परिभाषित फ़ंक्शन हैं? तो आप एक ऐसा फ़ंक्शन बना सकते हैं जो वर्तमान "MAX (' A') "लौटाता है और इसे आपके कथन में उपयोग करता है? – stephenbayer

+0

यह (संग्रहीत प्रक्रियाओं) करता है लेकिन मुझे यकीन नहीं है कि यह आपको अभी भी ऐसा करने देगा। कोशिश करें –

-1

जैसे ही चयन सही है, आप इसे कर सकते हैं।

+1

यदि मैं स्वयं एक प्रश्न के रूप में चयन करता हूं, तो यह ठीक काम करता है। –

5

मुझे लगता है कि INSERT ... SELECT काम नहीं कर रहा है? मैं इसके लिए दस्तावेज में यह देखें:

सम्मिलित बयान का लक्ष्य तालिका क्वेरी का चयन भाग के FROM खंड में दिखाई दे सकते हैं। (यह MySQL के पुराने संस्करणों में संभव नहीं था।) इस मामले में, MySQL SELECT और से पंक्तियों को पकड़ने के लिए एक अस्थायी तालिका बनाता है और फिर उन पंक्तियों को लक्ष्य तालिका में सम्मिलित करता है।

जिज्ञासा से, MySQL का कौन सा संस्करण आप उपयोग कर रहे हैं?

+0

अगला सुझाव होगा, यदि आप MySQL के पुराने संस्करण का उपयोग कर रहे हैं, तो एक अस्थायी तालिका का उपयोग करें, जो MySQL के वर्तमान संस्करणों को स्पष्ट रूप से करता है। –

+0

.. यह काम करना चाहिए # सर्वर संस्करण: 5.0.45-Debian_1ubuntu3.3-log # प्रोटोकॉल संस्करण: 10 –

8

असल में , आप सम्मिलित करने पर तालिका को उपनाम कर सकते हैं। मैंने इस सवाल को पूरी जगह पर देखा है, लेकिन किसी ने ऐसा करने की कोशिश नहीं की है। तालिका से अधिकतम प्राप्त करने के लिए एक सबक्वायरी का उपयोग करें, लेकिन सबक्वायरी में तालिका को उपनाम करें।

INSERT INTO tableA SET fieldA = (SELECT max(x.fieldA) FROM tableA x)+1; 

एक अधिक जटिल उदाहरण है, जहां आप एक इसी माध्यमिक कुंजी है और इसी माध्यमिक कुंजी के लिए सबसे पहले रिकॉर्ड को सम्मिलित किया जा सकता है:

INSERT INTO tableA SET secondaryKey = 123, fieldA = COALESCE((SELECT max(x.fieldA) FROM tableA x WHERE x.secondaryKey = 123)+1,1); 

तालिका अलियासिंग से, यह फेंक नहीं है त्रुटि और काम करने लगता है। मैंने कुछ कोडिंग करते समय ऐसा किया, हालांकि मैं नहीं देख सकता कि क्या क्षेत्र में कोई मूर्ख वाक्यविन्यास त्रुटियां हैं, मैं उस प्रकार के वाक्यविन्यास का प्रयास करूंगा।

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