PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да изберете множество редове по техните съставни първични ключове в JOOQ?

Как да направите това ръчно

Можете да преведете вашата SQL заявка директно в jOOQ, като използвате DSL.row() за да конструирате израз за стойност на ред и след това:

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

Вижте също jOOQ ръчен раздел за IN предикат, степен> 1

Използвайте ключове за вграждане

Като алтернатива можете да се възползвате от допълнителната безопасност на типа, предлагана от новия jOOQ 3.14 <embeddablePrimaryKeys/> функция, която ви позволява да генерирате типове записи за всички първични ключове и техните препращащи външни ключове. Тогава вашата заявка ще гласи:

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

Това създава същата заявка като вашата оригинална, но въвежда безопасно и никога повече няма да забравите ключова колона. Не само когато правите заявка към първичния ключ, но и когато се присъединявате към него! Промяната на ключа ще доведе до грешка при компилиране:

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

Или имплицитно присъединяване ще изглежда така:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. (var)char като типа на колоната за изпълнение?

  2. проблем с целостта на връзката „един към много“ за времеви диапазони

  3. Защо IS NOT NULL е false при проверка на тип ред?

  4. Прозоречните функции на PostgreSQL игнорират нулевите стойности

  5. Маркирайте несъседни периоди от време