Как сортировать значения в столбцах и таблице обновлений?
Я полностью новичок в sql и не могу сделать это сам. Поэтому мне нужна твоя помощь.
Я хочу сортировать значения в столбце, а затем сохранять изменения. Но я не знаю, как это сделать.
Таблица выглядит так:
Id | Name | SomeDescription
---------------------------
1 |Best | Description1
2 |Worth | Description2
3 |Good | Description3
Я хочу получить что-то вроде этого:
Id | Name | SomeDescription
---------------------------
1 |Best | Description1
2 |Good | Description3
3 |Worth | Description2
Поэтому мне нужно отсортировать столбцы "id" и "name".
Я использую следующую инструкцию для сортировки значений столбца "name":
SELECT * FROM games ORDER BY name ASC
Но как я могу сортировать значения столбца id и сохранять изменения в таблице?
Пожалуйста, помогите.
Ответы
Ответ 1
Вам нужно будет использовать вторую таблицу
-
создайте новую таблицу games2
с той же структурой, что и ваша таблица games
, удостоверяясь, что идентификатор автоматически увеличивается
CREATE TABLE `games2` LIKE `games`;
-
скопируйте данные, отсортированные, в games2
INSERT INTO `games2` (`Name`, `SomeDescription`) SELECT `Name`, `SomeDescription` FROM `games` ORDER BY `Name`
-
удалить или переместить старую таблицу
-- DROP TABLE `games`;
-- or
RENAME TABLE `games` TO `games1`;
-
переименовать новую таблицу в старое имя
RENAME TABLE `games2` TO `games`;
Эти шаги приведут к тому, что вы хотите.
Ответ 2
Вы можете использовать функцию ранжирования ROW_NUMBER для нумерации строк.
SELECT UnsortedId = id
, SortedId = ROW_NUMBER() OVER (ORDER BY g.name, g.id)
FROM games
Ответ 3
это просто. просто используйте несколько кодов. Я пробовал это, и он работает. сначала создайте временную таблицу, одновременно сортируя значения.
create table new as select * from games order by name;
а затем отпустите таблицу игр, используя
drop table games;
теперь снова создайте таблицу игр с теми же свойствами и данными, что и в новом (где сортировка здесь является необязательной), используя
create table games as select * from new order by name;
теперь отмените таблицу temp "new"
drop table new;
теперь проверьте свою таблицу. он должен быть отсортирован.
Ответ 4
Вы можете использовать команду alter table, которая проще.
mysql> ALTER TABLE games ORDER BY name asc;
Что все!
Ответ 5
вы можете сортировать по два поля одновременно.
SELECT *
FROM games
ORDER BY id DESC, name ASC
Я не понимаю, что вы подразумеваете, сохраняя изменения в таблице. ORDER BY
, просто меняет отображаемый вами дисплей, не меняет данные в таблице, если вы не выполняете UPDATE
.
Если вы не знакомы с SQL, в Интернете есть много обучающих программ, которые могут помочь:
Курс SQL
Начальный учебник по SQL
Учебник по SQL - Изучите SQL
Изменить на основе комментариев, это можно сделать за один шаг:
create table #temp
(
id int,
name varchar(50),
somedesc varchar(50)
)
insert into #temp values (1, 'best', 'desc1')
insert into #temp values (2, 'worth', 'desc2')
insert into #temp values (3, 'good', 'desc3')
update t1
SET t1.id = t2.rn
, t1.somedesc = t1.somedesc
FROM #temp t1
JOIN
(
select id, name, somedesc, row_number() over(order by name, id) as rn
from #temp
) t2
on t1.id = t2.id
select *
from #temp
order by id
drop table #temp
Ответ 6
Это мое исправление... глупо просто
- Извлечь во временную таблицу
SELECT SortKeyValue (добавить любые другие фиксированные значения, просто не включайте существующую последовательность) INTO #Temp FROM SourceTable;
- Очистить стол:
TRUNCATE TABLE SourceTable
- Заново:
INSERT INTO SourceTable (SortKeyValue, DisplayOrder (плюс другие поля)) SELECT SortKeyValue, ROW_NUMBER() OVER (ORDER BY SortKeyValue) AS DispOrd (плюс другие поля) FROM #Temp;
- Готово!
Ответ 7
SQL > SELECT * FROM games ORDER BY ID, NAME;