一对多的反查询
现有
我想实现表2中相同fileid在更新programfilename时能够检测存在,
如我要将b.doc改成a.doc,会提示ab中已经存在a.doc你不能再添加相同;
由于bc和ab的fileid不同所以在更新时不提示.
我现在只知道exeid=2和要把exeid=2的programfilename更新为"a.doc"
我想要一句sql语句实现,现有两种想法
一.我根据exeid=2反查询表1的fileid,然后查找"a.doc"在表2中(对应表1的fileid)是否存在,我写的语句如下,但是实现不了,只能查询出"b.doc"[我觉得我这个想法绕的很远]
二.我不需要查询fileid,我只需要找表2中与exeid=2相同fileid的记录是否存在"a.doc",这可能需要内连接,但是我不会写.
请大神们指点一二,或者有更好的想法也告诉我,谢谢了.
表1
reqeustfilesystem
字段
fileid(主键) requestfilename
1 ab
2 bc
表2
programfilesystem
字段
exeid(主键) fileid(和表1的对应) programfilename
1 1 a.doc
2 1 b.doc
3 2 a.doc
-------------------
其中*id都为数值型
我想实现表2中相同fileid在更新programfilename时能够检测存在,
如我要将b.doc改成a.doc,会提示ab中已经存在a.doc你不能再添加相同;
由于bc和ab的fileid不同所以在更新时不提示.
我现在只知道exeid=2和要把exeid=2的programfilename更新为"a.doc"
我想要一句sql语句实现,现有两种想法
一.我根据exeid=2反查询表1的fileid,然后查找"a.doc"在表2中(对应表1的fileid)是否存在,我写的语句如下,但是实现不了,只能查询出"b.doc"[我觉得我这个想法绕的很远]
select a.programfilename from programfilesystem as a where a.fileid=(select fileid from requestfilesystem as b where a.exeid=2 and a.fileid=b.fileid)
这一句的结果相当于
select programfilename from programfilesystem where exeid=2
我居然不明白为什么这样
二.我不需要查询fileid,我只需要找表2中与exeid=2相同fileid的记录是否存在"a.doc",这可能需要内连接,但是我不会写.
请大神们指点一二,或者有更好的想法也告诉我,谢谢了.
...全文
相关推荐
数据库设计中的反规范
第一范式: 对于表中的每一行,必须且仅仅有唯一的行值.在一行中的每一列仅有唯一的值并且具有原子性. 第二范式: 第二范式要求非主键列是主键的子集,非主键列活动必须完全依赖整个主键。主键必须有唯一性的元素,一个主键可以由一个或更多的组成唯一值的列组成。一旦创建,主键无法改变,外键关联一个表的主键。主外键关联意味着一对多的关系.
MySQL多表外键数据库设计.docx
MySQL多表外键数据库设计.docx
mybatis一对多的查询方法
mybatis一对多的查询方法详解! mybatis一对多的查询方法详解! mybatis一对多的查询方法详解! mybatis一对多的查询方法详解!
mybatis关联查询问题(一对多、多对一)
mybatis关联查询问题(一对多、多对一) 博客系统源码
mybatis 一对一、一对多和多对多查询实例代码
主要介绍了mybatis 一对一、一对多和多对多查询的实例代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下


