插入到值(选择从……)

pu3pd22g  于 2021-06-21  发布在  Mysql
关注(0)|答案(26)|浏览(634)

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

kd3sttzy

kd3sttzy16#

实际上,我更喜欢sql server 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

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

yquaqz18

yquaqz1817#

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

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');

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

nhjlsmyf

nhjlsmyf18#

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

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)
2wnc66cl

2wnc66cl19#

要在第一个答案中添加一些内容,当我们只需要另一个表中的几条记录(在本例中只有一条)时:

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

fgw7neuy20#

claude houle的回答是:应该可以很好地工作,而且还可以有多个列和其他数据:

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

我只在access、sql2000/2005/express、mysql和postgresql中使用过这种语法,所以应该涵盖这些语法。它还应该与sqlite3一起工作。

juzqafwq

juzqafwq21#

这是将值与select一起使用的另一个示例:

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

tcbh2hod22#

select *
into tmp
from orders

看起来不错,但只有在tmp不存在时才有效(创建并填充它)(sql服务器)
要插入到现有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
g9icjywg

g9icjywg23#

尝试:

INSERT INTO table1 ( column1 )
SELECT  col1
FROM    table2

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

brjng4g3

brjng4g324#

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

这适用于所有dbms

ccgok5k5

ccgok5k525#

在informix中,正如claude所说:

INSERT INTO table (column1, column2) 
VALUES (value1, value2);
xyhw6mcr

xyhw6mcr26#

在多重值中只得到一个值 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))

相关问题