我有一个查询,其结果如下,如何用 NULL 替换重复值
查询:
SELECT
word.lemma,
synset.definition,
synset.pos,
sampletable.sample
FROM
word
LEFT JOIN
sense ON word.wordid = sense.wordid
LEFT JOIN
synset ON sense.synsetid = synset.synsetid
LEFT JOIN
sampletable ON synset.synsetid = sampletable.synsetid
WHERE
word.lemma = 'good'
所需结果:所有灰显结果均为 NULL
最佳答案
首先,这种转换通常最好在应用程序级别完成。原因是它预先假设结果集按特定顺序排列 - 即使没有 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
兼容。
关于mysql - 如何在sql中将重复值显示为NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55545446/