NutzCN Logo
问答 sql联表查询问题求解
发布于 2865天前 作者 1037424761 1911 次浏览 复制 上一个帖子 下一个帖子
标签: nutzwk

我想做个报表,值来自多个数据表,
例如:
select
A.id,
B.name,
from A
left join B on A.id = B.id
有分页的,看了有个“linkname”,但是不知道怎么用,文档也没怎么看明白,能解释下吗?

10 回复
select
A.id as a_id,
B.name as b_name,
from A
left join B on A.id = B.id

然后自定义sql的callback选record或entity都可以

意思是使用自定义sql,原本的:

/**
     * DataTable Page
     *
     * @param length   页大小
     * @param start    start
     * @param draw     draw
     * @param orders   排序
     * @param columns  字段
     * @param cnd      查询条件
     * @param linkname 关联查询
     * @return
     */
    public NutMap data(int length, int start, int draw, List<DataTableOrder> orders, List<DataTableColumn> columns, Cnd cnd, String linkname) {
        NutMap re = new NutMap();
        if (orders != null && orders.size() > 0) {
            for (DataTableOrder order : orders) {
                DataTableColumn col = columns.get(order.getColumn());
                cnd.orderBy(Sqls.escapeSqlFieldValue(col.getData()).toString(), order.getDir());
            }
        }
        Pager pager = new OffsetPager(start, length);
        re.put("recordsFiltered", this.dao().count(getEntityClass(), cnd));
        List<?> list = this.dao().query(getEntityClass(), cnd, pager);
        if (!Strings.isBlank(linkname)) {
            this.dao().fetchLinks(list, linkname);
        }
        re.put("data", list);
        re.put("draw", draw);
        re.put("recordsTotal", length);
        return re;
    }

不可以是吗?

没懂你要干啥

就是有一个学生表,还有一个课程表,我要把学生和课程名字在一张报表中展示,
使用的是XXX.data(length, start, draw, order, columns, cnd, null);
这只能查一张表上的内容啊....

所以嘛, 这个必须用自定义SQL

感谢,我试试。

@1037424761
如果写了一对多、多对多关系,比如:

    @ManyMany(from = "classId", relation = "cms_class_link", to = "linkId")
    private List<Cms_link> links;

那么linkname可以传 links,结果会拼在一起,而不需要自定义SQL

@wendal 你的回答不太准确哦~~~

扩展一下,还可以通过 fetchLinks 传递子表查询条件哈

添加回复
请先登陆
回到顶部