首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Apache MetaModel中连接多个表?

如何在Apache MetaModel中连接多个表?
EN

Stack Overflow用户
提问于 2017-02-28 14:36:23
回答 1查看 574关注 0票数 1

我需要在Apache MetaModel中的多个表上应用连接。我在谷歌上搜索,但没有找到任何相关的东西。有人能帮我解决这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2017-03-05 08:02:35

我猜你尝试过这种方法:

代码语言:javascript
复制
dataContext.query().from("table1").innerJoin("table2").on("id", "table1_id")...

实际上,它不提供连接超过两个表的功能。不过,使用WHERE子句中的条件而不是ON进行连接应该是可行的:

代码语言:javascript
复制
    UpdateableDataContext dataContext = new PojoDataContext();

    dataContext.executeUpdate(new UpdateScript() {

        public void run(UpdateCallback callback) {
            Table table1 = callback.createTable(callback.getDataContext().getDefaultSchema(), "table1").withColumn("id")
                    .ofType(ColumnType.INTEGER).asPrimaryKey().execute();

            Table table2 = callback.createTable(callback.getDataContext().getDefaultSchema(), "table2").withColumn("id")
                    .ofType(ColumnType.INTEGER).asPrimaryKey().withColumn("table1_id").ofType(ColumnType.INTEGER)
                    .execute();

            Table table3 = callback.createTable(callback.getDataContext().getDefaultSchema(), "table3").withColumn("id")
                    .ofType(ColumnType.INTEGER).asPrimaryKey().withColumn("table2_id").ofType(ColumnType.INTEGER)
                    .execute();

            callback.insertInto(table1).value("id", 1).execute();
            callback.insertInto(table2).value("id", 1).value("table1_id", 1).execute();
            callback.insertInto(table3).value("id", 1).value("table2_id", 1).execute();
            callback.insertInto(table3).value("id", 2).value("table2_id", 0).execute();
        }
    });

    Table table1 = dataContext.getTableByQualifiedLabel("table1");
    Table table2 = dataContext.getTableByQualifiedLabel("table2");
    Table table3 = dataContext.getTableByQualifiedLabel("table3");

    Column table1id = table1.getColumnByName("id");
    Column table2table1_id = table2.getColumnByName("table1_id");
    Column table3table2_id = table3.getColumnByName("table2_id");

    try (DataSet dataSet = dataContext.query().from(table1).and(table2).and(table3).selectAll().where(table1id).eq(table2table1_id).and(table1id).eq(table3table2_id).execute()) {
        while (dataSet.next()) {
            Row row = dataSet.getRow();
            System.out.println(row);
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42501819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档