a449088680
a449088680
2011-12-08 13:20
浏览 444
已采纳

三张没有外键关联的表做联合查询,应该如何写

有三张表

第一张是人员person表
字段:
ID SEX

第二张表是部门表dept
字段:
ID districtmark
其中districtmark有两个值,1和2 1表示部门属于市级,2表示部门属于区级

第三张表是部门人员表personDept
字段有:
ID personid deptid

每个人员都属于一个部门,三张表都没有外键,第一张人员表和第二张部门表通过第三张的部门人员表的personid和deptid关联起来

我想查出所有属于[b]区级[/b]部门的[b]人员[/b]出来,而且还能加上多条件的模糊查询语句,就是还能用where 1=1;
下面是sql语句,我在数据库里面可以执行

select distinct * from persona inner join personDept b on a.id = b.personid inner join dept c on b.deptid = c.id where c.districtmark = 2;

这是我写的hql语句,但有错

//模糊查询
string queryCondition=”;

if (id != null) {
queryCondition += " and (a.id like '%"+id+"%')";
}
if (sex != null) {
queryCondition += " and a.sex='" + sex + "'";
}
//hql语句
String query = "select distinct a from TOrgPerson as a, TOrgDeptpersons as b, TOrgDept as c where a.id = b.personid and b.deptid=c.id and c.districtmark = 2 " + " where 1=1 " + queryCondition;

//执行query查询语句

上面的hql应该怎么改呢?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • wuyunmin
    wuyunmin 2011-12-08 14:34
    已采纳

    //hql语句
    String query = "select distinct a from TOrgPerson as a, TOrgDeptpersons as b, TOrgDept as c [color=red]where [/color]a.id = b.personid and b.deptid=c.id and c.districtmark = 2 " + " [color=red]where [/color]1=1 " + queryCondition;

    你的hql语句中有两个where,先删除一个,在试试。别的也没看出什么问题来。

    点赞 评论
  • wuyunmin
    wuyunmin 2011-12-08 15:33

    你不是已经给queryCondition="";了吗?所以where 1=1没有意义了啊

    点赞 评论
  • luxixi3600
    luxixi3600 2011-12-08 15:52

    用DetachedCriteria啊,为啥非要用hql~~~。怪麻烦的。

    点赞 评论
  • luxixi3600
    luxixi3600 2011-12-08 15:53

    如果你非要用hql,那你就建视图好了,查起来更方便。

    点赞 评论

相关推荐