首页 > 解决方案 > 如何在 MySQL 中添加行并返回其中之一

问题描述

我需要在 HomeID 列中检索具有数字或空值的行,如果存在具有相同符号的行,则最终返回具有数字值的值

// my table
+--------+---------+-------+
| Symbol | Home ID | Value |
+--------+---------+-------+
| test   | 1       | value |
| test   | NULL    | value |
| test1  | 2       | value |
| test2  | 3       | vlaue |
+--------+---------+-------+

事实上,我做过类似的事情。它为我添加了符号,但我不知道如何返回我需要的诗

SELECT
    [Symbol],
    COUNT(*) AS CNT
FROM [DB].[dbo].[Table]
GROUP BY
    [Symbol]
HAVING COUNT(*) > 1;

标签: mysqlsql

解决方案


一种方法是:

select t.*
from t
where t.homeid is not null or
      not exists (select 1
                  from t t2 
                  where t2.symbol = t.symbol and t2.homeid is not null
                 );

如果您只有这三列并且每个符号只需要一行,您也可以使用聚合来执行此操作:

select symbol, max(homeid) as homeid,
       coalesce(max(case when homeid is not null then value end),
                max(value)
               ) as value
from t
group by symbol;

推荐阅读