sql >> Databáze >  >> RDS >> PostgreSQL

Jak vybrat více řádků podle jejich složených primárních klíčů v JOOQ?

Jak to provést ručně

Dotaz SQL můžete přeložit přímo do jOOQ pomocí DSL.row() k vytvoření výrazu hodnoty řádku a poté:

row(TEST_TBL.ID_PART_1, TEST_TBL.ID_PART_2).in(
  row("id_part_1_1", "id_part_2_1"),
  row("id_part_1_2", "id_part_2_2")
);

Podívejte se také na jOOQ manuální sekci o IN predikát, stupeň> 1

Používejte vkládací klíče

Případně můžete profitovat z dodatečné bezpečnosti typu, kterou nabízí nový jOOQ 3.14 <embeddablePrimaryKeys/> funkce, která umožňuje generovat typy záznamů pro všechny primární klíče a jejich odkazující cizí klíče. Váš dotaz by pak zněl:

ctx.select()
   .from(TEST_TBL)
   .where(TEST_TBL.TEST_TBL_PKEY.in(
      new TestTblPkeyRecord("id_part_1_1", "id_part_2_1"),
      new TestTblPkeyRecord("id_part_1_2", "id_part_2_2")
   ))
   .fetch();

To vytvoří stejný dotaz jako váš původní dotaz, ale zadáte jej bezpečně a už nikdy nezapomenete na klíčový sloupec. Nejen, když se dotazujete na primární klíč, ale také když se k němu připojujete! Změna klíče povede k chybě kompilace:

ctx.select()
   .from(TEST_TBL)
   .join(OTHER_TEST_TBL)
   .on(TEST_TBL.TEST_TBL_PKEY.eq(OTHER_TEST_TBL.TEST_TBL_PKEY.TEST_TBL_FKEY))
   .fetch();

Nebo implicitní připojení bude vypadat takto:

ctx.select(OTHER_TEST_TBL.testTbl().fields(), OTHER_TEST_TBL.fields())
   .from(OTHER_TEST_TBL)
   .fetch();



  1. jak používat phpfastcache?

  2. Odstraňte duplicitní řádky z tabulky pomocí spojení

  3. Nastavení MySQL InnoDB Cluster s MySQL Shell (plus MySQL Router)

  4. Jak převést soubor Excel do databáze mysql?