我有一个使用select插入的查询:
INSERT INTO courses (name, location, gid)
SELECT name, location, gid
FROM courses
WHERE cid = $cid
Run Code Online (Sandbox Code Playgroud)
是否可以只为插入选择"名称,位置",并将gid设置为查询中的其他内容?
假设你有一张桌子:
`item`
Run Code Online (Sandbox Code Playgroud)
有字段:
`id` VARCHAR( 36 ) NOT NULL
,`order` BIGINT UNSIGNED NOT NULL
Run Code Online (Sandbox Code Playgroud)
和:
Unique(`id`)
Run Code Online (Sandbox Code Playgroud)
你打电话给:
INSERT INTO `item` (
`item`.`id`,`item`.`order`
) SELECT uuid(), `item`.`order`+1
Run Code Online (Sandbox Code Playgroud)
MySql将在所有新创建的行中插入相同的uuid.
所以,如果你开始:
aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa, 0
bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb, 1
Run Code Online (Sandbox Code Playgroud)
你最终得到:
aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa, 0
bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb, 1
cccccccc-cccc-cccc-cccc-cccccccccccc, 1
cccccccc-cccc-cccc-cccc-cccccccccccc, 2
Run Code Online (Sandbox Code Playgroud)
如何命令MySql为每一行创建不同的uuid?
我知道以下在MSSQL中按预期工作:
INSERT INTO item (
id,[order]
) SELECT newid(), [order]+1
Run Code Online (Sandbox Code Playgroud)
nb我知道我可以选择结果,循环遍历它们并为我的PHP代码中的每一行发出一个单独的INSERT命令,但我不想那样做.我希望在数据库服务器上完成工作.
我正在向SQLite3中的表添加一个"索引"列,以允许用户轻松地重新排序数据,方法是重命名旧数据库并使用额外列创建一个新数据库.
我遇到的问题是,当我INSERT ... SELECT旧值时,我需要在'index'列中为每一行赋一个唯一的数字.
我在Oracle中发现了一个名为ROWNUM的有用术语,但SQLite3却没有.在SQLite中有相同的东西吗?
有一些表:
CREATE TABLE `asource` (
`id` int(10) unsigned NOT NULL DEFAULT '0'
);
CREATE TABLE `adestination` (
`id` int(10) unsigned NOT NULL DEFAULT '0',
`generated` tinyint(1) GENERATED ALWAYS AS (id = 2) STORED NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
我从asourceto复制一行adestination:
INSERT INTO adestination
SELECT asource.*
FROM asource;
Run Code Online (Sandbox Code Playgroud)
以上产生一个错误:
Error Code: 1136. Column count doesn't match value count at row 1
Run Code Online (Sandbox Code Playgroud)
好的,要求我提及生成的查询很奇怪。但是好的,我将该列添加到查询中:
INSERT INTO adestination
SELECT asource.*, NULL AS `generated`
FROM asource;
Run Code Online (Sandbox Code Playgroud)
这在 5.7.10 中运行良好。但是,它会在 5.7.11 中生成错误(由于修复 …
我遇到了MySQL 5.6 InnoDb在运行时忽略NOT NULL外键的问题INSERT INTO xxx (col) SELECT ....在以其他格式运行insert语句时,可以正确实施约束.启用外键检查,并且sql_mode = STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ENGINE_SUBSTITUTION
这是一个例子:
CREATE TABLE Test_Parent
(
id BIGINT(18) UNSIGNED PRIMARY KEY NOT NULL AUTO_INCREMENT,
dummy VARCHAR(255)
) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_unicode_ci
COMMENT 'Test parent table';
CREATE TABLE Test_Child
(
id BIGINT(18) unsigned PRIMARY KEY NOT NULL AUTO_INCREMENT,
fid BIGINT UNSIGNED NOT NULL,
FOREIGN KEY Fk_Test_Parent_01(fid) REFERENCES Test_Parent(id)
) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_unicode_ci
COMMENT …Run Code Online (Sandbox Code Playgroud) 我的表中有一行数据:
Key | Val1 | Val2
----+------+-----
1 | A | B
Run Code Online (Sandbox Code Playgroud)
我想复制这一行,但从列表中为每个新行分配一个不同的键(实际上是外键):
New keys
--------
2
3
4
Run Code Online (Sandbox Code Playgroud)
该列表可以通过查询轻松获得。复制后,表格应如下所示:
Key | Val1 | Val2
----+------+-----
1 | A | B
2 | A | B
3 | A | B
4 | A | B
Run Code Online (Sandbox Code Playgroud)
到目前为止,我想出的只是:
INSERT INTO table (Key, Val1, Val2) (
SELECT '2' AS Key, Val1, Val2 FROM table WHERE Key='1'
);
Run Code Online (Sandbox Code Playgroud)
这是可行的,但当然它一次只能复制一行。有没有办法一次复制所有行?
我正在使用 Oracle,如果它有什么区别的话。
我有一个返回一些 ora-01427 错误的 SQL 请求:
单行子查询返回多行
INSERT INTO my_table (value0, value1, value2, value3)
VALUES((SELECT MAX(value0) FROM my_table), '5', (SELECT DISTINCT(value2) FROM another_table), '8');
Run Code Online (Sandbox Code Playgroud)
问题是,我需要两个硬编码值,我需要来自仅返回一行的选择的值,并且我想对第二个选择返回的每一行执行此操作。
我觉得如果只有一个选择,这个查询就会起作用。有没有办法在 INSERT 中执行多个 SELECT ?语法是什么?
编辑: my_table 和 some_table 实际上是同一个表,很抱歉一开始就不清楚,实际上,我需要 value0 是唯一的,因此它需要每次都检索最大的 id,不仅仅是在插入之前,而是每次新插入时行已插入。
嗨,我正在使用 Spring Boot 1.3.5.RELEASE。我有需要开火的情况
INSERT INTO someTable1 (col1, col2, col3)
SELECT (10346, someTable2Id, 1048) FROM someTable2.
Run Code Online (Sandbox Code Playgroud)
我正在使用 Spring JdbcTemplate。
String sql = "INSERT INTO someTable1( col1, col2, col3 )
SELECT 10346, someTable2Id, 1048
FROM someTable2";
jdbcTemplate.update(sql);
Run Code Online (Sandbox Code Playgroud)
在执行此语句时,它卡在 jdbcTemplate.update(sql) 行上。似乎JdbcTemplate对INSERT INTO...SELECT声明没有很好的反应。相同的查询在数据库编辑器中运行良好。
我是使用存储过程的新手.我有这个查询从表中获取值.
之后,我需要将结果插入另一个表.
这是我的查询:
SELECT a.gender,
b.purpose_abroad_as_per_recorded_travel,
b.country_name
FROM b LEFT JOIN a
ON b.person_id=a.id
Run Code Online (Sandbox Code Playgroud)
我计划将所有结果插入表'c'.
如何使用存储过程同时进行选择和插入?谢谢
我从这个来源读到,您可以在postgres中的dupcliate键ignore上进行插入,但是我似乎无法从以下选择中使用它:
我已经看到您可以做的是:
insert into tab(id, val) values(1, 'nosert'), (2,
'nosert'), (3, 'nosert') on duplicate key ignore returning id;
Run Code Online (Sandbox Code Playgroud)
我为什么不能做这样的事情?
insert into table_one (field_one, field_two) select field_one, field_two from table_two on duplicate key ignore returning field_one;
Run Code Online (Sandbox Code Playgroud)
有人告诉我在重复项附近存在语法错误,但是在此之前的查询运行良好(尽管它在重复的索引上冲突),其余的查询只是添加on duplicate key ignore returning field_one。
这不可能select from吗?
insert-select ×10
mysql ×5
sql ×4
sql-server ×2
constraints ×1
foreign-keys ×1
notnull ×1
oracle ×1
postgresql ×1
spring ×1
spring-boot ×1
spring-jdbc ×1
sql-insert ×1
sqlite ×1
uuid ×1