在数据库中,经常有这样的数据:
a1 b1 c1 d1
a1 b2 c1 d2
a2 b3 c2 d3
a1 b2 c3 d3
a1 b2 c1 d3
注意第二条和第五条数据,其中条件属性都为a1 b2 c1,但是决策属性却不相等,一个是d2一个是d3,即相同的条件属性却有不同的决策属性,即此决策表在粗糙集中称为不一致决策表,今天所做的就是把不一致决策表中的不一致数据去掉,使之成为一致决策表。
先用select property1,property2,property3 from answer_new group by property1,property2,property3 having count(*) > 1找出重复的数据的条件属性
然后用最简单的select id from answer_new where property1='a1' and property2='b2' and property3='c1'找出不一致数据的ID,并保存到idVector中
然后再交idVector中的数据只保留一个ID就好,其余的ID均delete掉,"delete from answer_new where id = " + id.get(j)
收获:
1 有些功能固然可以用编程实现,但是因与数据相关,要仔细思考能否用SQL语句来实现,这样会在编程上节省很多
2 有时把问题想复杂了并不是好事,例如存储时想用类propertyValue然后再保存到Vector中,但是最后的存储结构并不是像我想的那样。于是又折回来,直接用Vector存储
3 有时有的数据结果不一定非要存下来然后再处理,而是直接数据就数据地来处理,这样可以节省很多存储空间和编程上的麻烦。如,第二个的查询语句就是WHERE中的查询条件就是直接应用了第一个查询结果,而没有交其保存在V中
4 要注意数据什么时候该声明,什么时候该赋值,有的时候在不同的地方特别是在括号里外,结果会完全不一样
5 要多想,看有没有其它的方法到达相同的目的地,可能会很慢,但会很有收获。但是也不能想太多,呵呵
问题:
1第二个查询时的WHERE查询条件,是一个property一个property的相等来的,不知道到了真实数据,会不会影响效率。可能一定会影响的吧,:(
2 delete from tables where.....直接delete,不加*
明天要做的:
1 实现粗糙集的属性约简算法,明天就可以么?悬啊
这样很好啊,随用随记,权当总结了,不错不错啊
评论