নির্বাচন সহ সন্নিবেশ করুন


287

আমার একটি প্রশ্ন রয়েছে যা একটি নির্বাচন ব্যবহার করে সন্নিবেশ করায়:

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

সন্নিবেশের জন্য কেবল "নাম, অবস্থান" নির্বাচন করা এবং কোয়েরিতে অন্য কোনও কিছুর জন্য গিড সেট করা সম্ভব?

উত্তর:


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
@ তাহসুলতান্তেমুরি বিভিন্ন প্রশ্ন। তবে যদি আমি বুঝতে পারি যে আপনি কী জিজ্ঞাসা করছেন, এসকিউএল সার্ভার (যা জিজ্ঞাসা করা হয়নি তা নয়, তবে আমি কী এই দিনগুলি ব্যবহার করি) এর একটি OUTPUTধারা রয়েছে , যা আপনাকে অন্য টেবিলে inোকানো যা কিছু দিতে দেয় lets আমি মনে করি না যে মাইএসকিউএলের একটি সমতুল্য আছে। আপনি একটি অস্থায়ী টেবিল তৈরি করতে পারেন , সেই টেবিলের মধ্যে নির্বাচন করুন, তারপরে coursesসেই টেবিলটি থেকে পপুলেট করুন, তারপরে আপনার যা যা প্রয়োজন প্রয়োজন তা টেম্প টেবিলটি ব্যবহার করুন।
অ্যান্ড্রু

31

হ্যাঁ, তাই তুমি লিখতে পারো :

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

বা আপনি নির্বাচিত অন্য যোগদানের থেকে মান পেতে পারেন ...


পাঠ্যক্রমের নাম, অবস্থান, গিডের নাম, অবস্থান, '$ এটি-> গিড' থেকে কোর্সগুলি যেখানে সিড = $ সিডের অন্তর্ভুক্ত করুন - আমি ত্রুটি পেয়েছি: আপনার এসকিউএল সিন্টেক্সে আপনার একটি ত্রুটি রয়েছে; সঠিক নাম লেখার জন্য 'মাইএসকিউএল সার্ভার সংস্করণের সাথে সম্পর্কিত ম্যানুয়ালটি পরীক্ষা করুন, নাম, অবস্থান, গিড নির্বাচন, নাম,' 22 'থেকে লাইন 1
কাইল

আমার অনুমান যে আপনার গ্রিড ক্ষেত্রটি একটি পূর্ণসংখ্যা তাই: '22' অবশ্যই 22 হওয়া উচিত ''- এই-> গিড' দ্বারা $ এই-> গিডে পরিবর্তন করুন
অ্যালেক্স রেচে মার্টিনেজ

22 এবং '22' এর স্ক্যোলের বিষয়টি বিবেচনা করা উচিত নয়, তবে ক্ষেত্রটি কোনও অনন্য শনাক্তকরণের মতো হওয়ার ক্ষেত্রে আমি একটি স্ট্রিং রেখেছি।
ডুমিট্রেস্কু বোগদান

8

সঠিক সিনট্যাক্স: নির্বাচন বানান ভুল ছিল

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

5

অবশ্যই, আপনি গিডের জন্য কী ব্যবহার করতে চান? একটি স্থিতিশীল মান, পিএইচপি ভার, ...

1234 এর একটি স্ট্যাটিক মান এর মতো হতে পারে:

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


1

অবশ্যই আপনি করতে পারেন.

একটি বিষয় তবে উল্লেখ করা উচিত: INSERT INTO SELECTঅন্য টেবিলের মধ্যে এক টেবিলে থেকে বিবৃতি কপি ডেটা এবং এটা টিপে এবং প্রয়োজন উৎস এবং লক্ষ্য টেবিল ম্যাচে যে ধরনের তথ্য। যদি দেওয়া সারণী কলামগুলি থেকে তথ্য ধরনের মেলে না (অর্থাত সন্নিবেশ করার চেষ্টা VARCHARমধ্যে INTবা, TINYINTবা INTমাইএসকিউএল সার্ভার একটি নিক্ষেপ করা হবে) 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()) খুব কার্যকর।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.