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

来源:互联网 发布:sql相加函数 编辑:程序博客网 时间:2024/06/03 14:27

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) countfrom t_testgroup by name</span>
结果:

检索结果










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

<span style="font-size:18px;">select * from t_test a,t_test bwhere 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 bwhere 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 c3WHERE 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 uidFROM cWHERE c.taskid IN ('a','b','c')GROUP BY uid HAVING COUNT(1) = 3</span>
DBA给出的解法!赞!赞!赞!赞!赞!赞!赞!

0 0
原创粉丝点击