我有一个看起来像这样的表:
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或其他工具?
答案 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;