sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur väljer man flera rader med deras sammansatta primärnycklar i JOOQ?

Hur man gör detta manuellt

Du kan översätta din SQL-fråga direkt till jOOQ med DSL.row() för att konstruera ett radvärdesuttryck och sedan:

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 även jOOQ manuellt avsnitt om IN predikat, grad> 1

Använd inbäddningsbara nycklar

Alternativt kan du dra nytta av den extra typsäkerheten som erbjuds av den nya jOOQ 3.14 <embeddablePrimaryKeys/> funktion, som låter dig generera posttyper för alla primärnycklar och deras refererande främmande nycklar. Din fråga skulle då lyda:

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

Detta ger samma fråga som din ursprungliga, men skriver säkert, och du kommer aldrig att glömma en nyckelkolumn igen. Inte bara när du frågar efter primärnyckeln, utan också när du går med i den! Att ändra nyckeln kommer att resultera i ett kompileringsfel:

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 koppling skulle se ut så här:

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



  1. Oracle Stored Procedure utan parameter med Nhibernate

  2. Hur current_date fungerar i PostgreSQL

  3. Hur man använder Top with Ties i SQL Server - SQL Server / TSQL Tutorial Del 114

  4. Felsökning av MySQL-replikering:Del ett