MySQL比较然后删除较短的字符串

时间:2020-07-14 00:07:27

标签: mysql sql

我有一个看起来像这样的表:

company_name  |  description   
-----------------------------
google        |  a great search engine!
facebook      |  connect with friends!

我将向列表中添加更多公司,并具有重复公司的潜力-如果添加重复公司,我希望该公司具有更长的描述。因此,如果我添加了:

google    |  empty
facebook  | facebook is an enterprise software for connecting individuals around the world

我希望决赛桌看起来像这样:

company_name  |  description   
-----------------------------
google        |  a great search engine!
facebook      |  facebook is an enterprise software for connecting individuals around the world

在MySQL中有没有办法做到这一点,还是需要研究更强大的服务,例如Google BigQuery或其他工具?

2 个答案:

答案 0 :(得分:1)

您可以使用ON DUPLICATE KEY UPDATE进行此操作。

INSERT INTO companies (company_name, description) VALUES ('facebook', 'some new description')
ON DUPLICATE KEY UPDATE 
    description = IF(LENGTH(VALUES(description)) > LENGTH(description), VALUES(description), description)

VALUES(description)是要插入的新值,description是旧值。这样会比较它们的长度,并分配更长的长度。

我假设company_name是表中的唯一键。

答案 1 :(得分:1)

您也可以只插入表中的所有行,然后获取描述最长的行:

select company_name, description
from (select c.*,
             row_number() over (partition by company_name order by length(description) desc) as seqnum
      from companies c
     ) c
where seqnum = 1;
相关问题