如何使用Query DSL连接表

时间:2015-05-25 04:00:17

标签: mysql jpa querydsl predicates

我在我的应用程序中使用queryDsl进行复杂的搜索查询。我是querydsl的新手。我已经开始使用以下代码从一个表中获取几行(TableA)。 但是我必须在其他一些表(TableB)中找到具有相同id的人(Count)列表

public static Predicate find(final Long pId)
    QPerson qPerson = QPerson.person;
    Predicate predicate; 
    BooleanBuilder booleanBuilder = new BooleanBuilder();
    if (pId != null) {
        booleanBuilder.or(qPerson.person_no.eq(pId));
    } 
    if (name != null && !name.isEmpty()) {
        booleanBuilder.or(qPerson.expiry_dt.eq(name));
    }
    predicate = booleanBuilder.getValue();   
    return predicate;
    }

表A:

pId         name

1001      sampleNameA
1002      sampleNameB
1003      sampleNameC

表B:

pId        name       interests

1001     sampleNameA    music   
1001     sampleNameA    dance
1001     sampleNameA    coding
1003     sampleNameC    music   
1002     sampleNameB    dance
1002     sampleNameB    coding

我需要使用以下查询获得这样的输出

从master_person_table tableA中选择cnt cnt,tableA。*,(从tableB中选择count(*)cnt WHERE pId ='1002')cnt 在哪里pId ='1002'

输出:

  count  pId        name       
    2    1002   sampleNameB    

我需要在HTML中显示行数(对于id = 1002)。

任何人都可以帮我找到从tableB获取的pId的计数

提前致谢

1 个答案:

答案 0 :(得分:0)

请尝试以下查询: -

1.对于多个pIds: -

SELECT COUNT(*) AS COUNT, pId, name FROM TableB GROUP BY pId

2.仅对选定的pId: -

SELECT COUNT(*) AS COUNT, pId, name FROM TableB WHERE pId = 1002

如果你需要更多帮助,请告诉我。