数据库去除某几个字段相同值的行

Sqlserver数据库学习:

1.如何设计表的主键Id自增

t_tes表结构









新建一个表t_test,其中主键字段id,设置其为自增,自增步长为1

添加主键自增属性












在标识规范下拉菜单中选择是,默认步长为1,可以修改

2.在表插入若干条数据

<span style="font-size:18px;">insert into t_test(name,score,sex) values ('b','2','2')
insert into t_test(name,score,sex) values ('c','3','3')
insert into t_test(name,score,sex) values ('d','4','4')
insert into t_test(name,score,sex) values ('e','4','5')
insert into t_test(name,score,sex) values ('e','4','6')
insert into t_test(name,score,sex) values ('f','5','7')
insert into t_test(name,score,sex) values ('g','6','8')
insert into t_test(name,score,sex) values ('h','7','9')
insert into t_test(name,score,sex) values ('q','8','10')
insert into t_test(name,score,sex) values ('w','8','11')
insert into t_test(name,score,sex) values ('r','9','12')</span>


t_test数据如下:

t_test表中数据










基础的表和数据已经做好了.


2.表中数据统计

1.统计name相同的记录数据

<span style="font-size:18px;">select distinct name ,COUNT(name) count
from t_test
group by name</span>
结果:

检索结果










2.统计name和score相同的记录数据

<span style="font-size:18px;">select * from t_test a,t_test b
where a.name = b.name and a.score = b.score</span>
执行结果:

执行结果












很显然不合适我们的愿望,造成这种结果的是关系型数据采用的是笛卡尔积的算法,当定义t_test的两个变量a和b,进行自生关联的时候,会将a和b的中进行笛卡尔积相乘,然后在进行where语句的检索,所以会造成这个错误。

将上面的这个Sql语句进行加强,

<span style="font-size:18px;">select * from t_test a,t_test b
where a.name = b.name and a.score = b.score and a.id!=b.id</span>
执行结果:

执行结果








这样的结果是我想要得到的!


2.面试题二



这个题是帮同学做的,不过和以前的题目有类似的东西,所以值得学习。

方法一:

<span style="font-size:18px;">SELECT c1.`uid`
FROM c c1,c c2,c c3
WHERE c1.`uid` = c2.uid AND c1.`uid` = c3.`uid` AND c2.`uid` = c3.`uid` AND c1.`taskid` = 'b' AND c2.`taskid` = 'a' AND c3.`taskid`='c'</span>

这个解决显然是用了前面一种的思路。

方法二:

<span style="font-size:18px;">SELECT uid
FROM c
WHERE c.taskid IN ('a','b','c')
GROUP BY uid HAVING COUNT(1) = 3</span>
DBA给出的解法!赞!赞!赞!赞!赞!赞!赞!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值