3

次のような SQL テーブルがあるとします。

UniqueID  Word
1         apple
2         orange
3         banana
4         apple

ハッシュキーを整数として作成したい。その整数は、特定の単語にマップする必要があります。キーに何らかの意味を持たせるために、最初に出現した単語の UniqueID を数字にしたいと思います。つまり、次のようなテーブルを生成したいということです。

Unique ID  Word    WordHash
1          apple   1
2          orange  2
3          banana  3
4          apple   1

min(unique id) と共に group by ステートメントを使用してみましたが、最後のリンゴ行が削除されます。その列を維持したいと思います。

4

3 に答える 3

1

次のクエリを実行する必要があります

ALTER TABLE <table_name> ADD COLUMN `WordHash` INT NULL AFTER `Word`;

UPDATE <table_name> t INNER JOIN 
    (SELECT `word`, MIN(uniqueId) AS MinID FROM <table_name> GROUP BY `word`) q 
     ON t.word = q.word 
     SET WordHash = q.MinID;

それが役に立てば幸い...

于 2012-09-27T21:55:22.517 に答える
1

結果セットを取得するだけでなく、元のテーブルに新しい列を作成する場合:

update 
    t 
    inner join (
        select Word, min(UniqueID) as id
        from t
        group by Word
    ) s on t.Word = s.Word    
set t.WordHash = s.id
于 2012-09-27T21:46:46.250 に答える
1
SELECT t.UniqueID, t.Word, q.MinID AS WordHash
    FROM YourTable t
        INNER JOIN (SELECT Word, MIN(UniqueID) AS MinID
                        FROM YourTable
                        GROUP BY Word) q
            ON t.Word = q.Word
于 2012-09-27T21:36:59.700 に答える