如何在内部查询中引用外部查询的成员?

尼古拉斯·玛侯多(Nicolas Mahoudeaux)

我想在JPA 2.1 Criteria API中编写此SQL查询:

select * from t_question q
where
(select count(*) from t_question_tag tag 
   where 
       q.question_id  = tag.question_id
       AND tag.tag_id in (18, 1)
) = 2;

我不知道如何在内部查询中引用外部问题成员。

我目前在这一点上:

      CriteriaQuery<Question> cq = criteriaBuilder.createQuery(Question.class);
Root<Question> questions = cq.from(Question.class);
cq.distinct(true);

  Subquery<Long> selectTags = cq.subquery(Long.class);
  Root<QuestionTag> qt = selectTags.from(QuestionTag.class);
  Join<QuestionTag, Question> qtJoin = qt.join("question");
  selectTags
    .select(criteriaBuilder.count(qtJoin))
    .where(
        qt.get("tag").in(filter.getTags())
        );
  cq.where(criteriaBuilder.and(insArray),
      criteriaBuilder.equal(criteriaBuilder.literal(filter.getTags().size()), selectTags));

但这会创建第二个Join。SQL结果是:

SELECT DISTINCT ...
FROM T_QUESTION question0_
WHERE 1                    =
  (SELECT COUNT(question3_.question_id)
  FROM T_QUESTION_TAG questionta2_
  INNER JOIN T_QUESTION question3_
  ON questionta2_.question_id=question3_.question_id
  WHERE questionta2_.tag_id IN (18));
尼尔·斯托克顿

我希望子查询更像这样

Subquery<Long> selectTags = cq.subquery(Long.class);
Root<QuestionTag> qt = selectTags.from(QuestionTag.class);
selectTags.select(criteriaBuilder.count(qt));
selectTags.where(
        criteriaBuilder.equal(questions.get("id"), qt.get("id")),
        qt.get("tag").in(filter.getTags())
        );

使用外部查询中的候选项(“问题”)来引用外部查询,也看不到您为什么以前进行过联接。我假设“问题”和“标签”中的字段都称为“ id”。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在内部查询条件中使用外部查询列

来自分类Dev

如何在内部查询条件中使用外部查询列

来自分类Dev

在SQL查询中如何在内部执行IN表达式?

来自分类Dev

SQL Server With子句递归在查询级别如何在内部工作

来自分类Dev

如何在内部查询中使用逗号分隔值与listagg?

来自分类Dev

如何在内部和外部链接脚本?

来自分类Dev

如何在内部调用的模块中存根或监视外部方法?

来自分类Dev

如何在内部嵌套方法中访问外部变量?

来自分类Dev

如何在内部嵌套方法中访问外部变量?

来自分类Dev

为什么可以在内部函数成员中访问对象引用,而不能在内部属性成员中访问对象引用?

来自分类Dev

如何在MySQL的内部查询中从外部查询访问值

来自分类Dev

数组在c / c ++中如何在内部工作

来自分类Dev

如何在内部控件中传递ObservableField

来自分类Dev

如何在内部函数PHP中访问变量?

来自分类Dev

如何在内部类Android中访问变量

来自分类Dev

数组在c / c ++中如何在内部工作

来自分类Dev

在NestJS中InjectRepository如何在内部工作?

来自分类Dev

如何在内部类Android中访问变量

来自分类Dev

peewee是否可以嵌套SELECT查询,以便外部查询在内部查询的集合上进行选择?

来自分类Dev

peewee是否可以嵌套SELECT查询,以便外部查询在内部查询的集合上进行选择?

来自分类Dev

Symfony和Doctrine DQL查询生成器:如果条件检查,如何在内部使用多个setParameters?

来自分类Dev

为什么可以在内部函数成员中而不是内部属性成员中访问对象引用?

来自分类Dev

接口如何在内部工作?

来自分类Dev

“ range()”如何在内部工作?

来自分类Dev

在内部类中进行更改时,如何在整个外部类中更改变量值?

来自分类Dev

如何在Windows 7中启用,禁用和在内部和外部麦克风之间切换?

来自分类Dev

如何在SET子查询中引用外部表?

来自分类Dev

什么是 sql 查询在内部联接中具有、分组依据

来自分类Dev

元组(a,b)=(b,a)中的成员交换在内部如何工作?

Related 相关文章

  1. 1

    如何在内部查询条件中使用外部查询列

  2. 2

    如何在内部查询条件中使用外部查询列

  3. 3

    在SQL查询中如何在内部执行IN表达式?

  4. 4

    SQL Server With子句递归在查询级别如何在内部工作

  5. 5

    如何在内部查询中使用逗号分隔值与listagg?

  6. 6

    如何在内部和外部链接脚本?

  7. 7

    如何在内部调用的模块中存根或监视外部方法?

  8. 8

    如何在内部嵌套方法中访问外部变量?

  9. 9

    如何在内部嵌套方法中访问外部变量?

  10. 10

    为什么可以在内部函数成员中访问对象引用,而不能在内部属性成员中访问对象引用?

  11. 11

    如何在MySQL的内部查询中从外部查询访问值

  12. 12

    数组在c / c ++中如何在内部工作

  13. 13

    如何在内部控件中传递ObservableField

  14. 14

    如何在内部函数PHP中访问变量?

  15. 15

    如何在内部类Android中访问变量

  16. 16

    数组在c / c ++中如何在内部工作

  17. 17

    在NestJS中InjectRepository如何在内部工作?

  18. 18

    如何在内部类Android中访问变量

  19. 19

    peewee是否可以嵌套SELECT查询,以便外部查询在内部查询的集合上进行选择?

  20. 20

    peewee是否可以嵌套SELECT查询,以便外部查询在内部查询的集合上进行选择?

  21. 21

    Symfony和Doctrine DQL查询生成器:如果条件检查,如何在内部使用多个setParameters?

  22. 22

    为什么可以在内部函数成员中而不是内部属性成员中访问对象引用?

  23. 23

    接口如何在内部工作?

  24. 24

    “ range()”如何在内部工作?

  25. 25

    在内部类中进行更改时,如何在整个外部类中更改变量值?

  26. 26

    如何在Windows 7中启用,禁用和在内部和外部麦克风之间切换?

  27. 27

    如何在SET子查询中引用外部表?

  28. 28

    什么是 sql 查询在内部联接中具有、分组依据

  29. 29

    元组(a,b)=(b,a)中的成员交换在内部如何工作?

热门标签

归档