插入到值(选择从……)

watbbzwu  于 2021-07-24  发布在  Java
关注(0)|答案(26)|浏览(503)

我正在努力 INSERT INTO 使用另一个表的输入的表。尽管这对于许多数据库引擎是完全可行的,但我似乎总是很难记住 SQL 今天的引擎(mysql、oracle、sqlserver、informix和db2)。
是否有一个来自sql标准(例如sql-92)的银弹语法允许我插入值而不必担心底层数据库?

pcww981p

pcww981p1#

下面是如何从多个表中插入。在这个特定的示例中,在多对多场景中有一个Map表:

  1. insert into StudentCourseMap (StudentId, CourseId)
  2. SELECT Student.Id, Course.Id FROM Student, Course
  3. WHERE Student.Name = 'Paddy Murphy' AND Course.Name = 'Basket weaving for beginners'

(我意识到匹配学生姓名可能会返回多个值,但你明白了。当id是标识列且未知时,有必要对id以外的内容进行匹配。)

irlmq6kh

irlmq6kh2#

postgres支持下一步:创建表company.monitor2作为select*from company.monitor;

ssgvzors

ssgvzors3#

在informix中,正如claude所说:

  1. INSERT INTO table (column1, column2)
  2. VALUES (value1, value2);
t2a7ltrp

t2a7ltrp4#

如果使用“插入值”路径插入多行,请确保使用括号将值分隔为多个集合,以便:

  1. INSERT INTO `receiving_table`
  2. (id,
  3. first_name,
  4. last_name)
  5. VALUES
  6. (1002,'Charles','Babbage'),
  7. (1003,'George', 'Boole'),
  8. (1001,'Donald','Chamberlin'),
  9. (1004,'Alan','Turing'),
  10. (1005,'My','Widenius');

否则mysql对象“列计数与第1行的值计数不匹配”,当您最终确定如何处理它时,您将编写一篇无关紧要的文章。

zkure5ic

zkure5ic5#

如果您想在表中插入一些数据而不想写入列名。

  1. INSERT INTO CUSTOMER_INFO
  2. (SELECT CUSTOMER_NAME,
  3. MOBILE_NO,
  4. ADDRESS
  5. FROM OWNER_INFO cm)

表格所在位置:

  1. CUSTOMER_INFO || OWNER_INFO
  2. ----------------------------------------||-------------------------------------
  3. CUSTOMER_NAME | MOBILE_NO | ADDRESS || CUSTOMER_NAME | MOBILE_NO | ADDRESS
  4. --------------|-----------|--------- || --------------|-----------|---------
  5. A | +1 | DC || B | +55 | RR

结果:

  1. CUSTOMER_INFO || OWNER_INFO
  2. ----------------------------------------||-------------------------------------
  3. CUSTOMER_NAME | MOBILE_NO | ADDRESS || CUSTOMER_NAME | MOBILE_NO | ADDRESS
  4. --------------|-----------|--------- || --------------|-----------|---------
  5. A | +1 | DC || B | +55 | RR
  6. B | +55 | RR ||
展开查看全部
gjmwrych

gjmwrych6#

  1. select *
  2. into tmp
  3. from orders

看起来不错,但只有在tmp不存在时才有效(创建并填充它)(sql服务器)
要插入到现有tmp表中,请执行以下操作:

  1. set identity_insert tmp on
  2. insert tmp
  3. ([OrderID]
  4. ,[CustomerID]
  5. ,[EmployeeID]
  6. ,[OrderDate]
  7. ,[RequiredDate]
  8. ,[ShippedDate]
  9. ,[ShipVia]
  10. ,[Freight]
  11. ,[ShipName]
  12. ,[ShipAddress]
  13. ,[ShipCity]
  14. ,[ShipRegion]
  15. ,[ShipPostalCode]
  16. ,[ShipCountry] )
  17. select * from orders
  18. set identity_insert tmp off
展开查看全部
vcirk6k6

vcirk6k67#

插入任何其他表中的多条记录的最佳方法。

  1. INSERT INTO dbo.Users
  2. ( UserID ,
  3. Full_Name ,
  4. Login_Name ,
  5. Password
  6. )
  7. SELECT UserID ,
  8. Full_Name ,
  9. Login_Name ,
  10. Password
  11. FROM Users_Table
  12. (INNER JOIN / LEFT JOIN ...)
  13. (WHERE CONDITION...)
  14. (OTHER CLAUSE)
xyhw6mcr

xyhw6mcr8#

  1. INSERT INTO FIRST_TABLE_NAME (COLUMN_NAME)
  2. SELECT COLUMN_NAME
  3. FROM ANOTHER_TABLE_NAME
  4. WHERE CONDITION;
ijxebb2r

ijxebb2r9#

对于microsoftsqlserver,我建议您学习解释msdn上提供的语法。使用google,查找语法比以往任何时候都容易。
对于这种特殊情况,请尝试
谷歌:插入site:microsoft.com
第一个结果是http://msdn.microsoft.com/en-us/library/ms174335.aspx
如果您发现很难解释页面顶部给出的语法,请向下滚动到示例(“使用select和execute选项插入其他表中的数据”)。

  1. [ WITH <common_table_expression> [ ,...n ] ]
  2. INSERT
  3. {
  4. [ TOP ( expression ) [ PERCENT ] ]
  5. [ INTO ]
  6. { <object> | rowset_function_limited
  7. [ WITH ( <Table_Hint_Limited> [ ...n ] ) ]
  8. }
  9. {
  10. [ ( column_list ) ]
  11. [ <OUTPUT Clause> ]
  12. { VALUES ( { DEFAULT | NULL | expression } [ ,...n ] ) [ ,...n ]
  13. | derived_table <<<<------- Look here ------------------------
  14. | execute_statement <<<<------- Look here ------------------------
  15. | <dml_table_source> <<<<------- Look here ------------------------
  16. | DEFAULT VALUES
  17. }
  18. }
  19. }
  20. [;]

这应该适用于任何其他可用的rdbms。记住所有产品的所有语法是没有意义的。

展开查看全部
jljoyd4f

jljoyd4f10#

这对我有用:

  1. insert into table1 select * from table2

这个句子和甲骨文的有点不同。

j91ykkif

j91ykkif11#

实际上,我更喜欢sql server 2008中的以下内容:

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

它消除了添加insert()集的步骤,只需选择表中的值。

yzxexxkh

yzxexxkh12#

如果要使用插入所有列,可以尝试此操作 SELECT * INTO table。

  1. SELECT *
  2. INTO Table2
  3. FROM Table1;
0yycz8jy

0yycz8jy13#

  1. INSERT INTO yourtable
  2. SELECT fielda, fieldb, fieldc
  3. FROM donortable;

这适用于所有dbms

iyfjxgzm

iyfjxgzm14#

尝试:

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

这是标准的ansisql,应该适用于任何dbms
它绝对适用于:
Oracle
ms sql服务器
mysql数据库
博士后
sqlite v3版
天睿资讯
db2公司
赛贝斯
眩晕
hsqldb公司
氢气
aws红移
sap hana公司
谷歌扳手

展开查看全部
wbgh16ku

wbgh16ku15#

下面是另一个使用多个表获取源的示例:

  1. INSERT INTO cesc_pf_stmt_ext_wrk(
  2. PF_EMP_CODE ,
  3. PF_DEPT_CODE ,
  4. PF_SEC_CODE ,
  5. PF_PROL_NO ,
  6. PF_FM_SEQ ,
  7. PF_SEQ_NO ,
  8. PF_SEP_TAG ,
  9. PF_SOURCE)
  10. SELECT
  11. PFl_EMP_CODE ,
  12. PFl_DEPT_CODE ,
  13. PFl_SEC ,
  14. PFl_PROL_NO ,
  15. PF_FM_SEQ ,
  16. PF_SEQ_NO ,
  17. PFl_SEP_TAG ,
  18. PF_SOURCE
  19. FROM cesc_pf_stmt_ext,
  20. cesc_pfl_emp_master
  21. WHERE pfl_sep_tag LIKE '0'
  22. AND pfl_emp_code=pf_emp_code(+);
  23. COMMIT;
展开查看全部

相关问题