多表关联查询,使用sql管理的疑问!

比如有三个表,a(aid,aname......)、b(bid,bname......)、c(cid,aid,bid......)。

现在有个条件查询,按aid,bid等条件进行查询。select c.*,a.aname,b.bname from a a,b b,c c where c.aid=a.aid and c.bid=b.bid

#for(x:params)

.....

#end

如果条件是aid或bid的话,SQL语句需要指名,如c.aid=...或者c.bid=...

我现在用if来判断key如果是aid,然后c.aid=#(x.value)是可以实现。但是条件多了,并且关联的字段也多感觉不方便。请问有没有更简单的写法???(不好意思,用手机访问的,排版可能很丑)


评论区

JFinal

2018-07-23 17:13

参考一下文档中 sql 管理模块的高级用法:
http://www.jfinal.com/doc/5-13

参数可以放在 Map 中,map 的 key 可以带有大于、小于、等于这类比较符号,例如:
#sql("find")
select * from girl
#for(x : cond)
#(for.first ? "where": "and") #(x.key) #para(x.value)
#end
#end

用的时候这样传参:
Kv cond = Kv.by("age > ", 16).set("sex = ", "female");
SqlPara sp = Db.getSqlPara("find", Kv.by("cond", cond));
Db.find(sp);

然后再在 sql 中利用 #for 指令配全 if 判断就可以实现复杂的功能了

最后,你还可以利用 #define 定义一些常用的功能,例如组装 id in (?, ?, ? ....) 这类语句的 #define idIn(idList)

Didier

2018-07-24 09:49

@JFinal 嗯,我直接把a.bid放到map里面了,这样可以~~后面的sql就可以不用去判断了

热门反馈

扫码入社