一个表里有多个字段需要同时使用字典表进行关联显示,如何写sql查询语句
2018-06-18 19:34
671 查看
参考:https://bbs.csdn.net/topics/330032307
数据库里面有一个字典表,这张表里面有id段和对应的名字字段。
在另外一个记录的表里面有对应的上述字典表的id,而且有多个字段都含有该id字段。需要将其查出来,并且用名字。
1、第一种写法,不使用 left join
SELECT a.id AS '编号', 'STORY' AS '类型' , a.title AS '标题',b.name AS '所属项目' , c.realname AS '创建者', a.estimate AS '计划时间', d.realname AS '责任研发', a.resolvedDate AS '实际解决时间',a.closedDate AS '实际关闭时间',a.STATUS FROM zt_story a , zt_project b, zt_user c, zt_user d WHERE a.project=b.id AND a.openedby=c.account AND a.assignedTo=d.account AND a.id>=8650 AND a.id<= 8692 ORDER BY a.id
查询出的结果是严格的比照,为35条,比期望的43条少了8条。因为字典表内容缺少一些。
SELECT a.id AS '编号', 'BUG' AS '类型' , a.title AS '标题',b.name AS '所属项目' , c.realname AS '创建者', a.estimateDoneDate AS '计划时间', d.realname AS '责任研发', a.resolvedDate AS '实际解决时间',a.closedDate AS '实际关闭时间',a.STATUS FROM zt_bug a , zt_project b, zt_user c, zt_user d WHERE a.project=b.id AND a.openedby=c.account AND a.assignedTo=d.account AND a.id>=28095 ORDER BY a.id
查出29条记录。
2、使用Left join方法,可以全部查出来,43条,一些字典表里没有的数据对应字段为空
SELECT a.id AS '编号', 'STORY' AS '类型' , a.title AS '标题',b.name AS '所属项目' , c.realname AS '创建者', a.estimate AS '计划时间', d.realname AS '责任研发', a.resolvedDate AS '实际解决时间',a.closedDate AS '实际关闭时间',a.STATUS FROM zt_story a LEFT JOIN zt_project b ON a.project=b.id LEFT JOIN zt_user c ON a.openedby=c.account LEFT JOIN zt_user d ON a.assignedTo=d.account WHERE a.id>=8650 AND a.id<= 8692 ORDER BY a.id
上述语句完全将期望的43条记录全部查出,只是有8条记录的部分字段是空的。
SELECT a.id AS '编号', 'BUG' AS '类型' , a.title AS '标题',b.name AS '所属项目' , c.realname AS '创建者', a.estimateDoneDate AS '计划时间', d.realname AS '责任研发', a.resolvedDate AS '实际解决时间',a.closedDate AS '实际关闭时间',a.STATUS FROM zt_bug a LEFT JOIN zt_project b ON a.project=b.id LEFT JOIN zt_user c ON a.openedby=c.account LEFT JOIN zt_user d ON a.assignedTo=d.account WHERE a.id>=28095 ORDER BY a.id
该表对应的字典表数据均存在,所以上述语句执行后查询到的结果也是29条。
做个标记。
总结:
根据自己的期望,如果需要严格比照,不要用 LEFT JOIN。
如果需要显示全部记录,使用 LEFT JOIN
https://blog.csdn.net/flexitime/article/details/2380531 Delphi中写复杂SQL语句的简便方式
相关文章推荐
- 在使用Hibernate时,因为一个查询需要更多的表连接而要使用SQL来解决性能问题。然而返回的结果集中包含了没有映射的Entity类中的表字段,在这个SQL中还有使用如何将层次关系的父子结点显示为横行
- excel内一键进行sql查询(使用方法 1.选择’需要进行sql查询区域 包括字段名 2 输入sql语句 3.选择输出数据的单元格)
- 在 sql查询中如何将两个字段显示在一个字段
- 转载:如何写个SQL语句查询一个字段里是否有重复记录如果有只读取其中一条记录
- 如何在sql/plus中把select语句查询显示出来的结果中的显示字段长度缩小
- 如何用SQL语句查询一个数据表所有字段的类型
- 一个叫 team 的表,里面只有一个字段name, 一共有4 条纪录,分别是a,b,c,d, 对应四个球队,现在四个球队进行比赛,用一条sql 语句显示所有可能的比赛组合.
- 使用jpa hql语句查询关联多个表 如何用struts的iterator接受显示数据
- 用SQL语句怎么计算一个表里的字段 同时含有中英文的字数
- 如何用一个SQL语句查询多个表的记录数
- 查询同一表内多字段同时重复记录的SQL语句
- 查询同一表内多字段同时重复记录的SQL语句
- 今日同事教的一个将sql表名和字段名同时小写的sql语句
- 查询同一表内多字段同时重复记录的SQL语句
- 查询同一表内多字段同时重复记录的SQL语句
- 查询同一表内多字段同时重复记录的SQL语句
- 一个字段匹配查询的SQL语句
- 查询同一表内多字段同时重复记录的SQL语句
- 执行SQL语句时出现问题操作必须使用一个可更新的查询错误的解决方法
- 查询同一表内多字段同时重复记录的SQL语句(转)