चयन के साथ सम्मिलित करें


287

मेरे पास एक क्वेरी है जो एक चयन का उपयोग करके सम्मिलित करता है:

INSERT INTO courses (name, location, gid) 
            SELECT name, location, gid 
              FROM courses 
             WHERE cid = $cid

क्या सम्मिलित करने के लिए केवल "नाम, स्थान" का चयन करना संभव है और क्वेरी में किसी अन्य चीज़ के लिए gid सेट करना है?

जवाबों:


548

हाँ, बिल्कुल, लेकिन अपने सिंटैक्स की जाँच करें।

INSERT INTO courses (name, location, gid)
SELECT name, location, 1
FROM   courses
WHERE  cid = 2

आप एक ही प्रकार का एक स्थिरांक रख सकते हैं gid, न कि केवल 1 का, निश्चित रूप से। और, मैंने अभी cidमूल्य बनाया है ।


2
काम किया, बहुत-बहुत धन्यवाद। सम्मिलित चयन के साथ, कोष्ठक क्षेत्र के नाम के आसपास आवश्यक नहीं हैं। लेकिन जब आप चयन के शीर्ष पर मूल्यों को निर्दिष्ट करना शुरू करते हैं, तो स्पष्ट रूप से आपको फ़ील्ड नामों के आसपास () की आवश्यकता होती है।
काइल

ध्यान दें कि आप आवेषण खंड में उपनामों का उपयोग नहीं कर सकते हैं: "INSERT INTO पाठ्यक्रम t1 (t1.name, t1.location, t1.gid) [...] विफल हो जाएगा।
राफेल

@ और क्या अगली बार सेलेक्ट रन किए बिना इसे चुनने की कोई विधि है? अगर मुझे पाठ्यक्रम तालिका का परिणाम और प्राप्त करना है
TAHA SULTAN TEMURI

1
@TAHASULTANTEMURI अलग प्रश्न। लेकिन अगर मैं समझता हूं कि आप क्या पूछ रहे हैं, तो SQL सर्वर (जो नहीं पूछा गया था, लेकिन मैं इन दिनों का क्या उपयोग करता हूं) में OUTPUTक्लॉज है , जो आपको एक और तालिका में सम्मिलित करने की अनुमति देता है। मुझे नहीं लगता कि MySQL का कोई समकक्ष है। आप एक अस्थायी तालिका बना सकते हैं , उस तालिका में चयन कर सकते हैं, फिर coursesउस तालिका से पॉप्युलेट कर सकते हैं, फिर जो कुछ भी आवश्यक हो, उसके लिए अस्थायी तालिका का उपयोग करें।
एंड्रयू

31

हाँ यही है। तुम लिख सकते हो :

INSERT INTO courses (name, location, gid) 
SELECT name, location, 'whatever you want' 
FROM courses 
WHERE cid = $ci

या आप चयन के किसी अन्य समूह से मान प्राप्त कर सकते हैं ...


INSERT INTO पाठ्यक्रम का नाम, स्थान, gid का चयन नाम, स्थान, '$ this-> gid' पाठ्यक्रम से जहां cid = $ cid - मुझे त्रुटि मिलती है: आपके SQL सिंटैक्स में कोई त्रुटि है; जाँच के मैनुअल है कि सही वाक्य रचना के पास का उपयोग करने के लिए अपने MySQL सर्वर संस्करण 'नाम, स्थान, gid का चयन करें नाम, स्थान,' 22 से मेल खाती है 'पाठ्यक्रम से कहां सीआइडी = 23' लाइन 1 पर
केली

मुझे लगता है कि आपका gid फ़ील्ड एक पूर्णांक है: '22' का 22 होना चाहिए। '$ this-> gid' को इस $ से
बदलें-

22 और '22' को sql से कोई फर्क नहीं पड़ना चाहिए, लेकिन मैंने इस मामले में एक तार डाल दिया है कि क्षेत्र एक विशिष्ट पहचानकर्ता के समान है।
डुमित्रसेस्कु बोगदान

8

सही सिंटैक्स: चयन वर्तनी गलत थी

INSERT INTO courses (name, location, gid)
SELECT name, location, 'whatever you want' 
FROM courses 
WHERE cid = $ci 

5

ज़रूर, क्या आप gid के लिए उपयोग करना चाहते हैं? एक स्थिर मूल्य, PHP var, ...

1234 का स्थिर मूल्य इस प्रकार हो सकता है:

INSERT INTO courses (name, location, gid)
SELECT name, location, 1234
FROM courses
WHERE cid = $cid


1

निःसंदेह तुमसे हो सकता है।

हालाँकि एक बात पर ध्यान दिया जाना चाहिए: INSERT INTO SELECTकथन एक तालिका से डेटा की प्रतिलिपि बनाता है और इसे दूसरी तालिका में सम्मिलित करता है और इसके लिए स्रोत और लक्ष्य तालिका मिलान में डेटा प्रकारों की आवश्यकता होती है। यदि दी गयी तालिका स्तंभों से डेटा प्रकार से मेल नहीं खाता (यानी सम्मिलित करने का प्रयास VARCHARमें INTया, TINYINTमें INTMySQL सर्वर एक फेंक देते हैं) SQL Error (1366)

तो सावधान रहें।

यहाँ कमांड का सिंटैक्स है:

INSERT INTO table2 (column1, column2, column3)
SELECT column1, column2, column3 FROM table1
WHERE condition;

साइड नोट: उदाहरण के लिए, अपने में कास्टिंग का उपयोग करके विभिन्न प्रकार के स्तंभ प्रविष्टि समस्या को दरकिनार करने का एक तरीका है SELECT:

SELECT CAST('qwerty' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin;

इस रूपांतरण ( CAST()के पर्याय है CONVERT()बहुत उपयोगी है अगर आपके टेबल में एक ही तालिका स्तंभ पर विभिन्न वर्ण सेट (जो संभवतः डेटा हानि हो सकती है अगर ठीक से संभाला नहीं) है)।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.