mysql - 如何在sql中将重复值显示为NULL?

标签 mysql sql linq-to-sql

我有一个查询,其结果如下,如何用 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'

结果: enter image description here

所需结果:所有灰显结果均为 NULL

enter image description here

最佳答案

首先,这种转换通常最好在应用程序级别完成。原因是它预先假设结果集按特定顺序排列 - 即使没有 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/

相关文章:

c# - 使用 LINQ to SQL 获取 ID

php - 如何更改magento中的管理URL?

php - 如何在 Laravel 中包含从 JSON 到 MySQL 的数据

php - 在 Laravel 中一次更新多列值

c# - 一般执法

c# - 将 LINQ-to-SQL 谓词组合成单个谓词

php - MYSQL - 使用两个独立的表进行登录验证,没有任何链接

sql - 如何优化这些 T-SQL 查询?

mysql - SQL 日期通配符

mysql - MySQL 中的回归分析