MySQL:在不折叠任何行的情况下生成摘要列

MySQL:在不折叠任何行的情况下生成摘要列,mysql,sql,Mysql,Sql,假设我有这样一个SQL表: UniqueID Word 1 apple 2 orange 3 banana 4 apple Unique ID Word WordHash 1 apple 1 2 orange 2 3 banana 3 4 apple 1 我想创建一个作为整数的散列键。这个整数应该映射到一个特定的字。所以这个键有一定的意

假设我有这样一个SQL表:

UniqueID  Word
1         apple
2         orange
3         banana
4         apple
Unique ID  Word    WordHash
1          apple   1
2          orange  2
3          banana  3
4          apple   1
我想创建一个作为整数的散列键。这个整数应该映射到一个特定的字。所以这个键有一定的意义,我希望这个数字是单词第一次出现时的唯一性。这意味着我要生成如下表:

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

我尝试使用GROUPBY语句和minunique id,但这就去掉了最后一行。我希望保留该行。

如果要在原始表中创建新列,而不是仅获取结果集,请执行以下操作:

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
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

您需要执行以下查询

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;

希望对您有所帮助……

谢谢。这似乎是最直接的方法。但是,与外部only select语句中没有连接和groupby word相比,添加的内部连接似乎大大降低了查询速度。MySQL可以在外部select语句上高效地按字分组。所以我希望有一种方法可以保持这种速度,并且仍然返回所有行。也许没有…你在单词栏上有索引吗?这应该会使它更高效。现在阅读MySQL索引。看起来很有希望。“我明天会试试这个。”Barmar为单词列编制索引成功了。这使得搜索从NRowsNWords转到NRowsC,其中C