INSERT INTO… সমস্ত মাইএসকিউএল কলামের জন্য নির্বাচন করুন


119

আমি এটি থেকে পুরানো ডেটা সরানোর চেষ্টা করছি:

this_table >> this_table_archive

সমস্ত কলাম অনুলিপি করা। আমি এটি চেষ্টা করেছি, কিন্তু এটি কার্যকর হয় না:

INSERT INTO this_table_archive (*) VALUES (SELECT * FROM this_table WHERE entry_date < '2011-01-01 00:00:00');

দ্রষ্টব্য: সারণীগুলি অভিন্ন এবং idএকটি প্রাথমিক কী হিসাবে সেট করেছে।


1
"এটি কাজ করে না" সংজ্ঞা দিন। আমি একই সমস্যা হতে পারে যা করছি কিন্তু আমি বলতে পারছি না কারণ আপনি বলেননি যে আপনার সমস্যাটি কী ছিল !!
30:55

এটি ভাঙ্গা হয়নি, এটি কেবল কাজ করে না।
ওয়েবমাস্টার জি

এখানে আরও দেখুন /programming/3709560/joining-three-tables-used-mysql

উত্তর:


218

সঠিক বাক্য গঠন ম্যানুয়ালটিতে বর্ণিত হয়েছে । এটা চেষ্টা কর:

INSERT INTO this_table_archive (col1, col2, ..., coln)
SELECT col1, col2, ..., coln
FROM this_table
WHERE entry_date < '2011-01-01 00:00:00';

যদি আইডি কলামগুলি একটি স্ব-বৃদ্ধি কলাম হয় এবং আপনার উভয় টেবিলের মধ্যে ইতিমধ্যে কিছু ডেটা থাকে তবে কিছু ক্ষেত্রে আপনি কলামের তালিকা থেকে আইডিটি বাদ দিতে এবং নতুন আইডি উত্পন্ন করতে পারেন পরিবর্তে মূলটিতে ইতিমধ্যে বিদ্যমান একটি আইডি avoidোকানো এড়াতে পারেন টেবিল। যদি আপনার লক্ষ্য সারণী খালি থাকে তবে এটি কোনও সমস্যা হবে না।


73

বাক্য গঠনটির জন্য এটি দেখতে এটির মতো দেখাচ্ছে ("সমস্ত" বোঝানোর জন্য কলামের তালিকাটি ছেড়ে দিন)

INSERT INTO this_table_archive
SELECT *
FROM this_table
WHERE entry_date < '2011-01-01 00:00:00'

আপনার যদি ইতিমধ্যে সংরক্ষণাগার সারণীতে ডেটা থাকে তবে প্রাথমিক কী ত্রুটিগুলি এড়ানোর জন্য

INSERT INTO this_table_archive
SELECT t.*
FROM this_table t
LEFT JOIN this_table_archive a on a.id=t.id
WHERE t.entry_date < '2011-01-01 00:00:00'
  AND a.id is null  # does not yet exist in archive

6
প্রাথমিক কী সংঘর্ষ এড়াতে বাম জোয়ারের জন্য +1।
হার্টলে ব্রোডি

23

মার্ক বাইয়ার্সের উত্তরটিতে যুক্ত করুন:

কখনও কখনও আপনি হার্ডকোডযুক্ত বিবরণ সন্নিবেশ করতে চান অন্যথায় অনন্য বাধা ব্যর্থ হতে পারে ইত্যাদি So সুতরাং কলামগুলির কিছু মানকে ওভাররাইড করে এমন পরিস্থিতিতে আপনি নিম্নলিখিতটি ব্যবহার করুন।

INSERT INTO matrimony_domain_details (domain, type, logo_path)
SELECT 'www.example.com', type, logo_path
FROM matrimony_domain_details
WHERE id = 367

অনন্য সীমাবদ্ধতা থেকে মুক্তি পাওয়ার জন্য এখানে আমার দ্বারা ডোমেন মান যুক্ত করা হয়েছে হার্ডকোডযুক্ত উপায়ে।


4

মানগুলি বিটের জন্য আপনার কি দ্বিগুণ () দরকার নেই? যদি এটি চেষ্টা না করে (যদিও আরও ভাল উপায় থাকতে হবে)

insert into this_table_archive (id, field_1, field_2, field_3) 
values
((select id from this_table where entry_date < '2001-01-01'), 
((select field_1 from this_table where entry_date < '2001-01-01'), 
((select field_2 from this_table where entry_date < '2001-01-01'), 
((select field_3 from this_table where entry_date < '2001-01-01'));

2
ওপি ব্যবহার করছে INSERT INTO .. SELECT FROM, নেই INSERT INTO .. VALUES। বিভিন্ন বৈশিষ্ট্য।
30:55

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