我试图使用另一个表的输入将数据插入到表中。尽管这对于许多数据库引擎来说是完全可行的,但我似乎总是很难记住当前SQL引擎(MySQL、Oracle、SQL Server、Informix和DB2)的正确语法。
是否有来自SQL标准(例如SQL-92)的银弹语法允许我插入值而不必担心底层数据库?
我试图使用另一个表的输入将数据插入到表中。尽管这对于许多数据库引擎来说是完全可行的,但我似乎总是很难记住当前SQL引擎(MySQL、Oracle、SQL Server、Informix和DB2)的正确语法。
是否有来自SQL标准(例如SQL-92)的银弹语法允许我插入值而不必担心底层数据库?
当前回答
只需在INSERT中使用SELECT子句的括号。例如:
INSERT INTO Table1 (col1, col2, your_desired_value_from_select_clause, col3)
VALUES (
'col1_value',
'col2_value',
(SELECT col_Table2 FROM Table2 WHERE IdTable2 = 'your_satisfied_value_for_col_Table2_selected'),
'col3_value'
);
其他回答
为了从另一个表中获取多值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))
如果您首先创建表,可以这样使用;
select * INTO TableYedek From Table
这将插入值,但与创建新的复制表不同。
大多数数据库遵循基本语法,
INSERT INTO TABLE_NAME
SELECT COL1, COL2 ...
FROM TABLE_YOU_NEED_TO_TAKE_FROM
;
我使用的每个数据库都遵循这种语法,即DB2、SQL Server、MY SQL、PostgresQL
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');
否则,MySQL对象“列计数与第1行的值计数不匹配”,当您最终决定如何处理它时,您将写一篇微不足道的文章。