PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm cách nào để chọn nhiều hàng bằng khóa chính tổng hợp của chúng trong JOOQ?

Cách thực hiện việc này theo cách thủ công

Bạn có thể dịch trực tiếp truy vấn SQL của mình sang jOOQ bằng cách sử dụng DSL.row() để xây dựng một biểu thức giá trị hàng và sau đó:

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

Xem thêm jOOQ phần thủ công về IN vị ngữ, mức độ> 1

Sử dụng các khóa có thể nhúng

Ngoài ra, bạn có thể thu lợi từ loại an toàn bổ sung được cung cấp bởi jOOQ 3.14 mới <embeddablePrimaryKeys/> tính năng này cho phép bạn tạo các loại bản ghi cho tất cả các khóa chính và khóa ngoại tham chiếu của chúng. Truy vấn của bạn sau đó sẽ đọc:

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

Điều này tạo ra cùng một truy vấn với truy vấn ban đầu của bạn, nhưng nhập một cách an toàn và bạn sẽ không bao giờ quên một cột chính nữa. Không chỉ khi bạn truy vấn khóa chính, mà còn khi bạn tham gia khóa đó! Thay đổi khóa sẽ dẫn đến lỗi biên dịch:

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

Hoặc tham gia ngầm sẽ giống như thế này:

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. Tự động gửi trong Flask-SQLAlchemy

  2. Chia tỷ lệ kết nối trong PostgreSQL bằng cách sử dụng gộp kết nối

  3. Postgres:sử dụng dấu thời gian để phân trang

  4. Sử dụng thời gian hiện tại theo giờ UTC làm giá trị mặc định trong PostgreSQL

  5. Tạo cơ sở dữ liệu Postgres bằng cách sử dụng tệp hàng loạt với [mẫu], [mã hóa], [chủ sở hữu] và tệp .sql