Во-первых, это тип преобразования, который обычно лучше выполнять на уровне приложения.Причина в том, что это предполагает, что набор результатов находится в определенном порядке - и вы, похоже, предполагаете это даже без предложения order by
.
Во-вторых, в приложении это часто проще.
Однако в MySQL 8+ это не так сложно.Вы можете сделать:
SELECT w.lemma,
(CASE WHEN ROW_NUMBER() OVER (PARTITION BY w.lemma, ss.definition ORDER BY st.sample) = 1
THEN ss.definition
END) as definition,
ss.pos,
st.sample
FROM word w LEFT JOIN
sense s
ON w.wordid = s.wordid LEFT JOIN
synset ss
ON s.synsetid = ss.synsetid LEFT JOIN
sampletable st
ON ss.synsetid = st.synsetid
WHERE w.lemma = 'good'
ORDER BY w.lemma, ss.definition, st.sample;
Чтобы это работало надежно, внешнее предложение ORDER BY
должно быть совместимо с ORDER BY
для оконной функции.