sql মান... প্রবেশ করুন(নির্বাচন করুন... থেকে...)




database syntax (18)

প্রথম উত্তরটিতে কিছু যোগ করার জন্য, যখন আমরা কেবল অন্য টেবিলে কয়েকটি রেকর্ড চাই (এই উদাহরণটিতে শুধুমাত্র একটি):

INSERT INTO TABLE1
(COLUMN1, COLUMN2, COLUMN3, COLUMN4) 
VALUES (value1, value2, 
(SELECT COLUMN_TABLE2 
FROM TABLE2
WHERE COLUMN_TABLE2 like "blabla"),
value4);

আমি অন্য টেবিলের ইনপুট ব্যবহার করে একটি টেবিলে INSERT INTO করার চেষ্টা করছি। যদিও এটি অনেক ডাটাবেস ইঞ্জিনের জন্য সম্পূর্ণরূপে কার্যকর, তবে আমি মনে করি প্রতিদিনের SQL ইঞ্জিন ( MySQL , Oracle , এসকিউএল সার্ভার , Informix এবং DB2 ) এর সঠিক সিনট্যাক্স মনে রাখতে সংগ্রাম করা হচ্ছে।

একটি রুপালী-বুলেট সিনট্যাক্স কি এসকিউএল মানক থেকে আসছে (উদাহরণস্বরূপ, SQL-92 ) যা আমাকে অন্তর্নিহিত ডাটাবেসের বিষয়ে উদ্বেগ ছাড়াই মানগুলি সন্নিবেশ করতে দেয়?


বেশিরভাগ ডাটাবেস বেসিক সিনট্যাক্স অনুসরণ করে,

INSERT INTO TABLE_NAME
SELECT COL1, COL2 ...
FROM TABLE_YOU_NEED_TO_TAKE_FROM
;

প্রতিটি ডেটাবেস আমি ব্যবহার করেছি এই সিনট্যাক্স, যেমন DB2 , SQL Server , MY SQL , PostgresQL


@ Shadow_x99 : এটি ভাল কাজ করা উচিত, এবং আপনার সাথে একাধিক কলাম এবং অন্যান্য ডেটা থাকতে পারে:

INSERT INTO table1 ( column1, column2, someInt, someVarChar )
SELECT  table2.column1, table2.column2, 8, 'some string etc.'
FROM    table2
WHERE   table2.ID = 7;

সম্পাদনা: আমার উল্লেখ করা উচিত যে আমি অ্যাক্সেস, এসকিউএল 2000/2005 / এক্সপ্রেস, মাইএসকিউএল এবং পোস্টগ্রেএসকিউএলএল এর সাথে এই সিনট্যাক্সটি ব্যবহার করেছি, তাই সেগুলিকে আচ্ছাদিত করা উচিত। একটি মন্তব্যকারী এটি SQLite3 সঙ্গে কাজ করব যে নির্দিষ্ট করেছে।


INSERT INTO yourtable
SELECT fielda, fieldb, fieldc
FROM donortable;

এই সব DBMS কাজ করে


এটা আমার জন্য কাজ করেছে:

insert into table1 select * from table2

বাক্য Oracle এর থেকে একটু ভিন্ন।


INSERT INTO FIRST_TABLE_NAME (COLUMN_NAME)
SELECT  COLUMN_NAME
FROM    ANOTHER_TABLE_NAME 
WHERE CONDITION;

যদি আপনি একাধিক সারি সন্নিবেশ করতে INSERT VALUES রুট যান তবে বন্ধনী ব্যবহার করে সেটগুলিতে VALUES সীমাবদ্ধ করা নিশ্চিত করুন, তাই:

INSERT INTO `receiving_table`
  (id,
  first_name,
  last_name)
VALUES 
  (1002,'Charles','Babbage'),
  (1003,'George', 'Boole'),
  (1001,'Donald','Chamberlin'),
  (1004,'Alan','Turing'),
  (1005,'My','Widenius');

অন্যথায় মাইএসকিউএল অবজেক্টগুলি যে "কলাম গণনা সারি 1 এ মান গণনা মেলে না", এবং আপনি শেষ পর্যন্ত এটি সম্পর্কে কী করবেন তা জানার সময় আপনি একটি তুচ্ছ পোস্ট লেখেন।


আমি আসলে এসকিউএল সার্ভার 2008 মধ্যে নিম্নলিখিত পছন্দ:

SELECT Table1.Column1, Table1.Column2, Table2.Column1, Table2.Column2, 'Some String' AS SomeString, 8 AS SomeInt
INTO Table3
FROM Table1 INNER JOIN Table2 ON Table1.Column1 = Table2.Column3

এটি সন্নিবেশ () সেট যোগ করার পদক্ষেপটি বাদ দেয় এবং আপনি কেবল টেবিলে কোন মানগুলি যান তা নির্বাচন করুন।


যদি আপনি SELECT অংশে সমস্ত কলামের জন্য মান সরবরাহ করেন তবে INSERT INTO অংশে কলামগুলি নির্দিষ্ট না করেই এটি করা যেতে পারে।

বলুন টেবিল 1 দুটি কলাম আছে। এই প্রশ্নের কাজ করা উচিত:

INSERT INTO table1
SELECT  col1, col2
FROM    table2

এটি কাজ করবে না ( col2 জন্য মান নির্দিষ্ট করা নেই):

INSERT INTO table1
SELECT  col1
FROM    table2

আমি এম এস এসকিউএল সার্ভার ব্যবহার করছি। আমি জানি না অন্যান্য আরডিএমএস কিভাবে কাজ করে।


অন্য কোন টেবিল থেকে একাধিক রেকর্ড সন্নিবেশ শ্রেষ্ঠ উপায়।

INSERT  INTO dbo.Users
            ( UserID ,
              Full_Name ,
              Login_Name ,
              Password
            )
            SELECT  UserID ,
                    Full_Name ,
                    Login_Name ,
                    Password
            FROM    Users_Table
            (INNER JOIN / LEFT JOIN ...)
            (WHERE CONDITION...)
            (OTHER CLAUSE)

এই মান নির্বাচন করে মান ব্যবহার করে আরেকটি উদাহরণ:

INSERT INTO table1(desc, id, email) 
SELECT "Hello World", 3, email FROM table2 WHERE ...

মাইক্রোসফ্ট এসকিউএল সার্ভারের জন্য, আমি MSDN এ প্রদত্ত SYNTAX ব্যাখ্যা করার জন্য শেখার সুপারিশ করব। গুগল এর সাথে সিনট্যাক্সের সন্ধানের জন্য এটি আগের তুলনায় সহজ।

এই বিশেষ ক্ষেত্রে, চেষ্টা করুন

গুগল: সন্নিবেশ সাইট: মাইক্রোসফট

প্রথম ফলাফল http://msdn.microsoft.com/en-us/library/ms174335.aspx

উদাহরণস্বরূপ স্ক্রোল করুন ("অন্যান্য সারণিতে ডেটা সন্নিবেশ করানোর জন্য নির্বাচন এবং এক্সিকিউটি বিকল্পগুলি ব্যবহার করুন") যদি পৃষ্ঠাটির শীর্ষে প্রদত্ত সিনট্যাক্সটি ব্যাখ্যা করা কঠিন হয়।

[ WITH <common_table_expression> [ ,...n ] ]
INSERT 
{
        [ TOP ( expression ) [ PERCENT ] ] 
        [ INTO ] 
        { <object> | rowset_function_limited 
          [ WITH ( <Table_Hint_Limited> [ ...n ] ) ]
        }
    {
        [ ( column_list ) ] 
        [ <OUTPUT Clause> ]
        { VALUES ( { DEFAULT | NULL | expression } [ ,...n ] ) [ ,...n     ] 
        | derived_table       <<<<------- Look here ------------------------
        | execute_statement   <<<<------- Look here ------------------------
        | <dml_table_source>  <<<<------- Look here ------------------------
        | DEFAULT VALUES 
        }
    }
}
[;]

এটি উপলব্ধ অন্য কোন RDBMS জন্য প্রযোজ্য হতে হবে। সমস্ত পণ্য IMO জন্য সমস্ত সিনট্যাক্স মনে রাখবেন কোন বিন্দু নেই।


অন্য টেবিল থেকে বহু মান INSERT তে কেবলমাত্র একটি মান পেতে আমি SQLite3 এ নিম্নলিখিতটি করেছি:

INSERT INTO column_1 ( val_1, val_from_other_table ) 
VALUES('val_1', (SELECT  val_2 FROM table_2 WHERE val_2 = something))

INSERT প্রশ্নের প্রশ্নের VALUES অংশ পরিবর্তে, নীচের হিসাবে SELECT প্রশ্ন ব্যবহার SELECT

INSERT INTO table1 ( column1 , 2, 3... )
SELECT col1, 2, 3... FROM table2

যদি আপনি SELECT * INTO টেবিল ব্যবহার করে সমস্ত কলাম সন্নিবেশ করতে চান তবে আপনি এটি ব্যবহার করতে পারেন।

SELECT  *
INTO    Table2
FROM    Table1;

এখানে আরেকটি উদাহরণ রয়েছে যেখানে উৎস একাধিক টেবিল ব্যবহার করে নেওয়া হয়:

INSERT INTO cesc_pf_stmt_ext_wrk( 
  PF_EMP_CODE    ,
  PF_DEPT_CODE   ,
  PF_SEC_CODE    ,
  PF_PROL_NO     ,
  PF_FM_SEQ      ,
  PF_SEQ_NO      ,
  PF_SEP_TAG     ,
  PF_SOURCE) 
SELECT
  PFl_EMP_CODE    ,
  PFl_DEPT_CODE   ,
  PFl_SEC         ,
  PFl_PROL_NO     ,
  PF_FM_SEQ       ,
  PF_SEQ_NO       ,
  PFl_SEP_TAG     ,
  PF_SOURCE
 FROM cesc_pf_stmt_ext,
      cesc_pfl_emp_master
 WHERE pfl_sep_tag LIKE '0'
   AND pfl_emp_code=pf_emp_code(+);

COMMIT;

select *
into tmp
from orders

সুন্দর দেখায়, কিন্তু যদি TMP উপস্থিত না থাকে তবেই এটি কাজ করে (এটি তৈরি করে এবং পূরণ করে)। (এসকিউএল পৃথক্)

বিদ্যমান tmp টেবিল মধ্যে সন্নিবেশ করা:

set identity_insert tmp on

insert tmp 
([OrderID]
      ,[CustomerID]
      ,[EmployeeID]
      ,[OrderDate]
      ,[RequiredDate]
      ,[ShippedDate]
      ,[ShipVia]
      ,[Freight]
      ,[ShipName]
      ,[ShipAddress]
      ,[ShipCity]
      ,[ShipRegion]
      ,[ShipPostalCode]
      ,[ShipCountry] )
      select * from orders

set identity_insert tmp off

চেষ্টা করুন:

INSERT INTO table1 ( column1 )
SELECT  col1
FROM    table2  

এটি মান ANSI এসকিউএল এবং কোন DBMS কাজ করা উচিত

এটা স্পষ্টভাবে জন্য কাজ করে:

  • আকাশবাণী
  • এমএস এসকিউএল সার্ভার
  • মাইএসকিউএল
  • Postgres
  • SQLite v3
  • Teradata
  • DB2
  • সাইবেস
  • Vertica
  • HSQLDB
  • ও H2
  • AWS RedShift
  • এসএপি হানা




ansi-sql-92