首页 > 解决方案 > INSERT INTO SELECT 如何以正确的顺序插入?

问题描述

我有简单的查询:

INSERT INTO test(id) SELECT rowid FROM words ORDER BY word

TABLE 测试有两个字段 'nr' 和 'id' - 'nr' 是 auto_increment

我希望按“ORDER BY”指定的顺序添加记录,但它们是按 rowid 排序的...

我得到如下结果:

nr id    
1  1
2  2
3  3

ETC ...

如何以正确的顺序进行?

CREATE TABLE `words` (
    `rowid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `word` VARCHAR(64) NULL DEFAULT NULL COLLATE 'utf8_polish_ci',
    `display` VARCHAR(64) NULL DEFAULT NULL COLLATE 'utf8_polish_ci',
    `difficult` TINYINT(4) UNSIGNED NULL DEFAULT NULL,
    `islocked` BIT(1) NULL DEFAULT NULL,
    `valid` BIT(1) NULL DEFAULT NULL,
    PRIMARY KEY (`rowid`),
    INDEX `word` (`word`),
    INDEX `display` (`display`)
)
COLLATE='utf8_polish_ci'
ENGINE=InnoDB
ROW_FORMAT=DYNAMIC
AUTO_INCREMENT=57009

标签: mysqlinsert

解决方案


@barpas 无法实现您想要的,因为您的 words.word 列不是唯一的。例如,假设单词“Apple”在您的单词表中出现 4 次,如下所示:

"rowid"  "word"
10     Apple
94     Apple
130    Apple
526    Apple

test.id 应该插入四个 ID 中的哪个?你有 4 个而不是 1 个结果。在 Paul 的示例中,没有重复值(“a”、“b”、“c”)都是不同的,并且没有一个重复。将 Paul 的示例更改为 ('a', 'a','a','b','b','c','c','c','c') ......这更像你的数据。


推荐阅读