【问题标题】:How can I joins multiple tables in Apache MetaModel?如何在 Apache MetaModel 中连接多个表?
【发布时间】:2017-02-28 06:36:22
【问题描述】:

我需要在 Apache MetaModel 中的多个表上应用连接。我通过谷歌搜索但没有找到任何相关内容。 有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: apache-metamodel


    【解决方案1】:

    我猜你尝试过这种方法:

    dataContext.query().from("table1").innerJoin("table2").on("id", "table1_id")...
    

    确实,它不提供连接两个以上的表。但是,使用 WHERE 子句中的条件而不是 ON 进行连接应该可以:

        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);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2015-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-16
      • 1970-01-01
      相关资源
      最近更新 更多