sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan vælger man flere rækker efter deres sammensatte primærnøgler i JOOQ?

Sådan gør du dette manuelt

Du kan oversætte din SQL-forespørgsel direkte til jOOQ ved hjælp af DSL.row() for at konstruere et rækkeværdiudtryk, og derefter:

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")
);

Se også jOOQ manuel sektion om IN prædikat, grad> 1

Brug indlejrbare nøgler

Alternativt kan du drage fordel af den ekstra typesikkerhed, der tilbydes af den nye jOOQ 3.14 <embeddablePrimaryKeys/> funktion, som giver dig mulighed for at generere posttyper for alle primærnøgler og deres refererende fremmednøgler. Din forespørgsel ville derefter læse:

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

Dette producerer den samme forespørgsel som din oprindelige, men skriver sikkert, og du vil aldrig glemme en nøglekolonne igen. Ikke kun når du forespørger på den primære nøgle, men også når du tilslutter dig den! Ændring af nøglen vil resultere i en kompileringsfejl:

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

Eller en implicit joinforbindelse ville se sådan ud:

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



  1. importer CSV til MySQL og konverter dato

  2. Sådan opdeles Oracle sql-sætninger til ADO.NET

  3. sammenføjning af to udvalgte udsagn

  4. Sådan fjerner du et bestemt tegn fra en streng, kun når det er det første eller sidste tegn i strengen.