2016-08-26 2 views
1

個別に動作する2つのクエリがありますが、それらを結合しようとすると、エラーが表示されます: "ERROR:テーブル" A "のFROM-clauseエントリがありません。クエリの目的は、["tag1"、 "tag2"、 "tag3"]という形式のJSONB列を持つ2つのテーブルの結合結果を列名TAGSで調べることです。私は何かが欠けているに違いないが、私は役に立たないいくつかのアプローチを試した。どのようにこの問題を解決するか?結果は、最後にワイルドカードとクエリに一致するタグの明確なリストでなければならない私はPostgreSQL 9.5.3を使用しています。FROM句エラーで失敗した2つの作業クエリのJooqの組み合わせ

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

Unionを使用する必要があります。私はちょうどそれを試してみましたし、それは私に同じエラー与え

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(); 
+0

:org.postgresql.util:によって引き起こさ これを(テストするjooqとワークスペースを持っていないが、このような何かが動作するはずです)試してみてください.PSQLException:エラー:テーブル "A"のFROM句のエントリがありません – thurmc

+0

なぜ私は知っていると思うのですか? 'value'は複合クエリには存在しないテーブル 'A'のエイリアスです。私の更新された答え.. – rohitvats

+0

それは働いた! 1つの変更:selectFromは渡されたテーブルを受け取り、c1をTable >に変更し、クエリの最後に.asTable( "c1")を追加しました。これを実行すると、期待どおりに動作します。手伝ってくれてどうもありがとう!私はjooqの基本的な選択よりも複雑なことをするのはかなりひどいです – thurmc

関連する問題