MySQL:在不折叠任何行的情况下生成摘要列
假设我有这样一个SQL表: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 我想创建一个作为整数的散列键。这个整数应该映射到一个特定的字。所以这个键有一定的意
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