Mysql 在集的两行中的第二行中查找与sthg匹配的记录
我有一个单词部分的数据库,每个单词有两行。所以基本上每个单词有一个两行的数据集。我想找到以元音结尾的单词(以便以后删除它们)。下面是一个示例行:Mysql 在集的两行中的第二行中查找与sthg匹配的记录,mysql,sql,Mysql,Sql,我有一个单词部分的数据库,每个单词有两行。所以基本上每个单词有一个两行的数据集。我想找到以元音结尾的单词(以便以后删除它们)。下面是一个示例行: ID wordID Segment SegType 2475 1170 d consonant 2476 1170 i vowel 2477 1171 a vowel 2578 1171 d consonant 前两个是一个错误的数据集(Wo
ID wordID Segment SegType
2475 1170 d consonant
2476 1170 i vowel
2477 1171 a vowel
2578 1171 d consonant
前两个是一个错误的数据集(WordID1170)——我希望找到这些数据集,然后删除它们。最后两个是一个很好的数据集(WordID1171),我想保留它们。要做到这一点,最简单的方法是获取wordID
s的列表,然后使用它们删除坏集
那么,如何为每个以元音结尾的集合选择wordID(也就是说,集合的两行中的第二行的值为
元音
)?第二部分的ID
总是高于第一部分,但不是可靠的奇数或偶数(我已经尝试过使用它的查询) 如果我理解正确,您可以使用分组方式
和拥有
:
select wordId
from t
group by wordId
having max(case when segtype = 'vowel' then id end) = max(id)
having
子句为每个wordId查找带有元音段的行的id
,并为每个wordId查找最大的id。如果这些ID相同,则结果集中会出现一个
wordId`。请尝试以下查询:
SELECT a.wordID
FROM words a JOIN words b ON a.wordID = b.wordID
WHERE a.ID > b.ID and a.segType = 'vowel';
这基本上在wordID
列上执行SELF-JOIN
,并返回所有值高于其连接对应项且“元音”为segType的ID。w2查询-此查询通过对wordID分组返回每个数据集的最后一个值
w2与wordID上的原始表w1(words)连接,并根据根据上述w2查询计算的最后一个值进行过滤
SELECT w1.*
FROM words w1
INNER JOIN
(
SELECT wordID,LAST_VALUE(SegType) OVER( PARTITION BY wordID ORDER BY id ) AS lv
FROM words
GROUP BY wordID
) w2
ON w1.wordID = w2.wordID
WHERE w2.lv = 'vowel';
前两个是坏方法。。你说的是1170吗?是的,我已经澄清了我的问题。你想消除重复吗?“坏”字ID的定义是什么?检查我发布的解决方案……以元音结尾的坏字(具有相同字ID的两行中的第二行有SegType=“vouel”)