17

私は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 列の値をソートし、変更をテーブルに保存できますか? 助けてください。

4

7 に答える 7

27

2番目のテーブルを使用する必要があります

  1. games2テーブルと同じ構造の新しいテーブルを作成gamesし、IDが自動インクリメントされることを確認します

    CREATE TABLE `games2` LIKE `games`;
    
  2. ソートされたデータをにコピーしますgames2

    INSERT INTO `games2` (`Name`, `SomeDescription`) SELECT `Name`, `SomeDescription` FROM `games` ORDER BY `Name`
    
  3. 古いテーブルをドロップまたは移動します

    -- DROP TABLE `games`;
    -- or
    RENAME TABLE `games` TO `games1`;
    
  4. 新しいテーブルの名前を古い名前に変更します

    RENAME TABLE `games2` TO `games`;
    

これらの手順により、必要な結果が得られます。

于 2012-04-09T21:05:23.810 に答える
4

ROW_NUMBER ランキング関数を使用して、行の番号を付け直すことができます。

SELECT UnsortedId = id
, SortedId = ROW_NUMBER() OVER (ORDER BY g.name, g.id)
FROM games 
于 2012-04-09T21:21:30.687 に答える
3

より簡単なalter tableコマンドを使用できます。

mysql> ALTER TABLE games ORDER BY name asc;

それで全部です !

于 2017-01-12T23:58:43.167 に答える
1

簡単です。いくつかのコードを使用するだけです。私はこれを試しましたが、動作しています。同時に値を並べ替えながら、最初に一時テーブルを作成します。

    create table new as select * from games order by name;

次に、次を使用してゲーム テーブルをドロップします。

    drop table games;

new と同じプロパティとデータで games テーブルを再度作成します (ここでの並べ替えはオプションです)。

    create table games as select * from new order by name;

一時テーブル「new」をドロップします

    drop table new;

今あなたのテーブルをチェックしてください。それは整理されなければなりません。

于 2016-02-02T08:37:15.170 に答える
0

同時に 2 つのフィールドを並べ替えることができます。

SELECT *
FROM games
ORDER BY id DESC, name ASC

テーブルに変更を保存するという意味がわかりません。はORDER BY、見ている表示を変更するだけで、 を実行しない限り、テーブル内のデータは変更されませんUPDATE

SQL に慣れていない場合は、オンラインで役立つチュートリアルがたくさんあります。

SQLコース

初心者向け SQL チュートリアル

SQL チュートリアル - SQL を学ぶ

コメントに基づいて編集します。これは 1 つのステップで実行できます。

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
于 2012-04-09T20:59:48.670 に答える
0

これは私の修正です...愚かな単純です:

  1. 一時テーブルに抽出

SELECT SortKeyValue (他の固定値を追加します。既存のシーケンスは含めないでください) INTO #Temp FROM SourceTable;

  1. テーブルを空にします。

TRUNCATE TABLE ソーステーブル

  1. 再挿入:

INSERT INTO SourceTable (SortKeyValue, DisplayOrder (およびその他のフィールド) ) SELECT SortKeyValue, ROW_NUMBER() OVER (ORDER BY SortKeyValue) AS DispOrd (およびその他のフィールド) FROM #Temp;

  1. 終わり!
于 2019-07-23T21:03:11.463 に答える