当前位置: 首页 > 知识库问答 >
问题:

Jooq两个工作查询的组合失败,FROM子句错误

柯轶
2023-03-14

我有两个单独工作的查询,但是当我试图组合它们时,我得到一个错误:“error:缺少表”a的from-子句条目“。查询的目的是查看两个表的组合结果,这两个表有一个JSONB列,其格式为[“tag1”、“tag2”、“tag3”]并带有列名标记。这两个查询单独工作,但当我试图组合它们时,我会得到错误。我一定是漏掉了什么,但我试了几种方法都无济于事。你知道如何解决这个问题吗?结果应该是一个不同的标记列表,这些标记与末尾带有通配符的查询匹配。下面是查询及其组合。我使用的是PostgreSQL 9.5.3

    final Field<String> value = field(name("A", "value"), String.class);

    final Table<Record1<String>> c1 = sql.dsl()
            .selectDistinct(value)
            .from(CAMPAIGN,lateral(table("jsonb_array_elements_text({0})", CAMPAIGN.TAGS)).as("A"))
            .where(CAMPAIGN.STORE_KEY.equal(campaign.getStoreKey()))
            .and(CAMPAIGN.CAMPAIGN_KEY.notEqual(campaignKey))
            .and(value.like(search + "%%"))
            .asTable("c1");

    final Table<Record1<String>> c2 = sql.dsl()
            .selectDistinct(value)
            .from(STOREFRONT, lateral(table("jsonb_array_elements_text({0})", STOREFRONT.TAGS)).as("A"))
            .where(STOREFRONT.STORE_KEY.equal(campaign.getStoreKey()))
            .and(value.like(search + "%%"))
            .asTable("c2");

    final Result<Record1<String>> result = sql.dsl()
            .selectDistinct(value)
            .from(c1, c2)
            .limit(30)
            .fetch();

共有1个答案

吴凯
2023-03-14

你需要用工会。尝试这样做(不要有一个带有jooq的工作区来测试,但类似这样的工作区应该可以工作):

final Field<String> value = field(name("A", "value"), String.class);

final Select<Record1<String>> c1 = sql.dsl()
        .selectDistinct(value)
        .from(CAMPAIGN,lateral(table("jsonb_array_elements_text({0})", CAMPAIGN.TAGS)).as("A"))
        .where(CAMPAIGN.STORE_KEY.equal(campaign.getStoreKey()))
        .and(CAMPAIGN.CAMPAIGN_KEY.notEqual(campaignKey))
        .and(value.like(search + "%%"));

final Select<Record1<String>> c2 = sql.dsl()
        .selectDistinct(value)
        .from(STOREFRONT, lateral(table("jsonb_array_elements_text({0})", STOREFRONT.TAGS)).as("A"))
        .where(STOREFRONT.STORE_KEY.equal(campaign.getStoreKey()))
        .and(value.like(search + "%%"));

final Result<Record1<String>> result = sql.dsl()
        .selectFrom(c1.asTable())
        .union(c2)
        .limit(30)
        .fetch();
 类似资料:
  • 问题内容: 这对我来说看起来很奇怪: 是一个临时表,但是其余的对我来说毫无意义。 你怎么能有两个子句? 问题答案: 从DELETE的文档中可以看出,它可以包含两个子句。 第一个: FROM:是可选关键字,可以在DELETE关键字和目标table_or_view_name或rowset_function_limited之间使用。 第二个: :指定一个附加的FROM子句。Transact- SQL的D

  • 问题内容: 我们正在开发一个使用EJB连接到数据库的Web应用程序。 在我们的数据库模型中,我们有一个移动设备表,另一个有功能表,最后一个有手机模型映射功能值的表。模型(id_model,…)功能(id_feature,…)model_features(id_model,id_feature,值) 我们想要执行一个查询,以按匹配特征的数量对模型进行排序。就是说,我们传递了一个要匹配的功能列表(即从

  • 问题内容: 我想用此查询执行的操作是:我有一个名为Dept的表,其中包含所有部门名称和ID,具有用户名,部门ID和ID的用户信息。我也有一个名为checkinout的第三个表,该表具有用户ID,并带有时间。 因此,我想(使用部门名称)将Checkinout表中的所有数据从属于该部门的人员那里获取,但是当我尝试该查询时,它给了我一个错误: 我无法解决。我正在使用Acces数据库。 非常感谢您的帮助。

  • 问题内容: 如何使用Criteria编写以下SQL: 问题答案: 要使用NHibernate,产生如下查询: 我们必须选择: 将子选择映射为实体。 创建原始SQL查询 第一种选择是创建一些,并将其映射为一个实体。如果我们不喜欢视图(或无法创建视图),则可以使用NHibernate映射元素element的功能 : 第二种选择是关于使用NHibernate API创建本机/原始SQL: 它没有从映射中

  • 问题内容: 我有两个表,我需要创建一个视图。这些表是: 我使用以下查询来执行此操作。不带“创建视图”部分的查询运行良好,但带有“创建视图”的查询则显示错误“视图的SELECT在FROM子句中包含子查询”。可能是什么问题和可能的解决方案: 问题答案: 根据文档: MySQL文档 SELECT语句在FROM子句中不能包含子查询。 解决方法是为每个子查询创建一个视图。 然后从您的视图中访问这些视图

  • 问题内容: 我有两张桌子。 我这样查询: 我使用UNION是因为如果用户在第一个表和第二个表中都存在,我想为每个用户获取不同的值。 例如: 如果peter在任何一张桌子上,我应该一次获得名称,因为它在两个桌子上都存在。 我仍然从第一张桌子得到一排,从第二张桌子得到第二排。怎么了? 任何帮助表示赞赏。 问题答案: 您的SQL有两个问题: (这是 不是 问题,但应考虑)使用过,而不是表,您创建性能噩梦