首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算每个记录的不同元素并更新它们

计算每个记录的不同元素并更新它们
EN

Stack Overflow用户
提问于 2015-12-26 18:09:14
回答 2查看 39关注 0票数 3

这是我的学生记录表,我试图为每个学生找出同名或同姓的其他学生的数量,并把它放在第一位,为每个学生保存。

代码语言:javascript
复制
   +-----------+-------------+------+-----+---------+-------+
   | Field     | Type        | Null | Key | Default | Extra |
   +-----------+-------------+------+-----+---------+-------+
   | first     | varchar(20) | YES  |     | NULL    |       |
   | last      | varchar(25) | YES  |     | NULL    |       |
   | samefirst | int(11)     | YES  |     | NULL    |       |
   | samelast  | int(11)     | YES  |     | NULL    |       |
   +-----------+-------------+------+-----+---------+-------+


select a.first as af, a.last as al, b.first as bf, b.last as bl  
from StudRec a inner join
     StudRec b
     on a.first = b.first and a.last <> b.last) or 
        a.first <> b.first and a.last = b.last;

上面的查询提供给我每个学生和他的第一个或最后一个学生匹配,但是我在为每个学生做计数并将其插入samefirst和samelast时遇到了困难。先谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-26 18:19:23

使用关联子查询查找每个学生的名字或姓氏相似的学生。

代码语言:javascript
复制
SELECT SR.first,
       SR.last,
       (SELECT COUNT(*) FROM StudRec AS SR2
        WHERE SR2.first = SR.first) AS samefirst,
       (SELECT COUNT(*) FROM StudRec AS SR2
        WHERE SR2.last = SR.last) AS samelast
FROM StudRec AS SR
票数 2
EN

Stack Overflow用户

发布于 2015-12-26 18:17:24

这很复杂,因为您需要进行更新。在MySQL中,不应该使用子查询中正在更新的表。您可以使用join来解决这个问题。

代码语言:javascript
复制
update studrec sr left join
       (select first, count(*) as cnt
        from studrec
        group by first
       ) f
       on sr.first = f.first left join
       (select last, count(*) as cnt
        from studrec
        group by last
       ) l
       on sr.last = l.last
    set samefirst = coalesce(f.cnt, 0),
        samelast = coalesce(l.cnt, 0);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34473896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档