加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 更新和删除合并记录的查询

发布时间:2020-12-13 17:00:41 所属栏目:PHP教程 来源:网络整理
导读:我有一张包含以下记录的表格 id | fname | lname | skills 22 | Jane | Doe | php,mysql 43 | Jane | Doe | java,oracle,php45 | Jane | Doe | mongo,mysql id是主键.我想执行一个查询,以便在表中看起来像这样 id | fname | lname | skills 45 | Jane | Doe
我有一张包含以下记录的表格

id | fname | lname | skills 

22 | Jane |  Doe | php,mysql 
43 | Jane |  Doe | java,oracle,php
45 | Jane |  Doe | mongo,mysql

id是主键.我想执行一个查询,以便在表中看起来像这样

id | fname | lname | skills 

45 | Jane |  Doe | php,mysql,java,mongo

技能将与最新的id和其他重复记录合并删除

任何帮助对我都非常有用.

解决方法

试试这个:

UPDATE YourTable t
INNER JOIN(SELECT max(s.id) as max_id,s.fname,s.lname,GROUP_CONCAT(distinct(s.skills)) as skill_str
           FROM YourTable s
           GROUP BY s.fname,s.lname) t1
 ON (t.lname = t1.lname and t.fname = t1.fname AND t.id = t1.max_id)
SET t.skills = t1.skill_str

这会将表更新为您想要的concat,然后删除:

DELETE FROM YourTable t
WHERE t.ID NOT IN(SELECT MAX(s.id) FROM YourTable s
                  GROUP BY s.lname,s.fname)

只有当ID是唯一的时,删除才有效!它将删除所有不是最大ID的记录

编辑:试试这个:

DELETE t
FROM candidate t
LEFT JOIN(SELECT MAX(s.candidate_id) as max_id FROM candidate s
          GROUP BY s.fname,s.lname) t1
 ON (t.candidate_id = t1.max_id)
WHERE t1.max_id is null

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读