INSERT INTO SELECT, как вставить в правильном порядке? - PullRequest
0 голосов
/ 18 октября 2019

У меня простой запрос:

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

и т. д.

Как сделать это правильнозаказать?

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

1 Ответ

0 голосов
/ 18 октября 2019

@ barpas Невозможно достичь того, чего вы хотите, потому что ваш столбец words.word не уникален. Например, допустим, слово «Apple» встречается в таблице слов 4 раза, например:

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

Какой из четырех идентификаторов должен быть вставлен в test.id? Вместо 1 результата у вас есть 4. В примере с Полом нет повторяющихся значений («a», «b», «c»), все они разные, и ни одно из них не повторяется. Измените пример Павла, чтобы иметь вместо него («a», «a», «a», «b», «b», «c», «c», «c», «c») ... Это больше похоже наваши данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...