MySQL:生成摘要列而不折叠任何行

时间:2012-09-27 21:33:28

标签: mysql sql

假设我有一个这样的SQL表:

UniqueID  Word
1         apple
2         orange
3         banana
4         apple

我想将哈希键创建为整数。该整数应映射到特定单词。因此,密钥具有一定的含义,我希望该数字是第一次出现的单词的唯一ID。这意味着我想生成一个这样的表:

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

我尝试使用group by语句,以及min(唯一ID),但是它摆脱了最后一个苹果行。我想保留这一行。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分: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;

希望它有所帮助...