2017.8.18

作者: zhjwang | 来源:发表于2017-08-19 11:47 被阅读6次

1、问题1昨天在做多个数据库表之间的依赖查询更新时遇到一个问题。

场景:
A表和B表之间有依赖,当我需要通过它们之间的关系来修改B表的某些值时,我使用了以下的代码:

UPDATE ALEFT JOIN BON A.id = B.idSET B.age = A.age
WHERE ......

导致的问题是:B中需要修改的字段有的被改变了,有的没有被改变。

1.1、解决思路

查询相关的知识后,才发现原来是自己理解有误,LEFT JOIN的意思是将左边表的所有表项都能拿出来,然后进行修改。如下图所示:

图片.png

这样就会导致在修改B表时,因为只拿出了一部分,所以有的修改了,有的没有修改。正确的做法应该是:
方案1:

UPDATE B LEFT JOIN AON A.id = B.idSET B.age = A.age

方案2:

UPDATE B RIGHT JOIN A
    ON A.id = B.id
SET B.age = A.age

1.2、反思

之所以写成这样,是因为在我和pair结对的过程中,我一直看他都是这么写,自己私下却没有搞清楚其中的原理。总觉得挺简单的,用的时候我去查下就好了,这是一种错误的做法,现在将JOIN有关的总结如下:
求差集:

图片.png
SELECT * FROM A LEFT JOIN B ON A.name = B.nameWHERE B.id IS NULLunionSELECT * FROM A right JOIN B ON A.name = B.nameWHERE A.id IS NULL;

求所有的集合:

图片.png
select * from A left join B on B.name = A.name union select * from A right join B on B.name = A.name;

2、问题2

关于Mybaits嵌套查询的问题。
现在有如下需求:有两张数据库表,表A和表B,我想通过表A中的id找到与表B中id相同的字段,但是在表B中与表A相同的id有多个,但是要求我必须要将表B中查询到的数据放在一个集合中。

2.1、思路

最开始尝试的办法,就是使用sql,将数据查询出来,然后再在java代码级别,进行数据的组装,发现处理起来实在是麻烦。最后林老师告诉我,我们在使用mybits,会方便处理这个,由于之前没有这方面的经验,所以对Mybits没有想到。下来将mybits处理这种需求的方案记录下来:1.首先会使用相关的类来调用对数据库的操作:

//根据id 来查找一个表项的所有内容
Table  getbyId(Integer id)

2.添加相关的配置文件:

 <resultMap id="getTableMap" type="com.example.Table">
 <id property="id" column="id"></id> <result property="age" column="age" /> <collection property="choices" ofType="string" javaType="list"> <result column="choice" /> </collection></resultMap><select id="getById" resultMap="getTableMap"> SELECT *FROM ALEFT JOIN B ON A.id=B.idWHERE id =#{id};</select>

解释:
当使用getById时,会进入到select部分,执行sql语句,查询到数据库中的数据后,会将结果进入到resultMap中,将结果依据配置,放入到具体的类对象中。即resultMap中的内容,id,age,choices等都表示具体的字段名,其中property表示类中的字段名,column表示具体的数据库列名(注意一定要对应切来,否则会出错)。collection标签就表示希望将从数据库中的到的内容放入到一个集合中,在这里表示将多个choice放入到类型为string的list结合中。从而实现了上面提到的需求。

3、Action

1、通过这两天做数据库迁移方面的工作,发现了之前对数据库操作的基本知识已经不熟悉了,后续需要对数据库的基本操作进行学习和积累。
2、因为之前没做过mybits相关的开发,现在项目上使用了,所以需要对mybits做持续的学习。

相关文章

  • 2017.8.18

    关于时间管理,需要自省,在这里告诫自己。

  • 2017.8.18

    1.为vue项目添加了网站ico 2.继续学习ES6,巩固异步函数async,promise

  • 2017.8.18

    最近,辣妈群里在撕比。 一群人对一个。 我不敢插嘴,并不是因为我怕输,而是因为我这人最容易被影响心情,我怕万一我输...

  • 2017.8.18

    想和你说 却不知如何说起 无人可倾诉 我像是陷在沼泽里 一口气都不得呼吸 想你拉我一把 给我一份勇气

  • 2017.8.18

    如果喜欢画 就简单地画就好了 从来觉得画画这件事 只需跟随自己内心 就好 但是 一件越是简单的事 也会一不小心变得...

  • 2017.8.18

    头发画的好丑,求指点

  • 2017.8.18

    每天几乎都是这个时候才能静下心来静静的听课,每天听着别人的艾故事,自己慢慢的成长。 加入艾艾贴,也有大半年了,自我...

  • 2017.8.18

    早上好!#幸福实修#~每天进步1%#幸福实修10班-22号-@金珠清--富阳 20170817(24/30) 【幸...

  • 2017.8.18

    知识是指能帮助你提供决策意见且长期对结果有更好的利益的信息。 我们这代人从小就灌输知识改变命运的旗号,父母也是在穷...

  • 2017.8.18

    1、问题1昨天在做多个数据库表之间的依赖查询更新时遇到一个问题。 场景:A表和B表之间有依赖,当我需要通过它们之间...

网友评论

      本文标题:2017.8.18

      本文链接:https://www.haomeiwen.com/subject/uqltdxtx.html