2016-10-24 2 views
1

Jooq 레코드 목록과 동기화 된 postgres 데이터베이스 테이블을 가져 오려고합니다.JOOQ를 사용하여 "in not"절의 여러 열을 지정하는 삭제 작업

는 I가 복합 기본 키 테이블 및 각 행의 세 개의 다른 값을 가질

table(k1, k2, v1, v2, v3) 

예를 들어, 데이터는

Last, First, Age, Weight, Height 
Smith, Joe, 21, 75,  160 
Jones, Pete, 23, 80,  180 

가 (로 이름을 사용하는 불량한 형태 실례 수도 기본 키 ....)

또한 내 Java 코드에서 해당 테이블에 대한 Jooq 레코드 목록이 있습니다.

가 새 행이
  • 이다 조 스미스에 대한 데이터베이스 행이 높이으로 업데이트하고있다
    • ,의 두 개의 자바 기록 나는 일이 좀 코드를 실행하면됩니다 원하는 것이 무엇

      [ 
          <Smith, Joe, 21, 75, 180>, 
          <Taylor, Mark, 54, 90, 170> 
      ] 
      

      이 있다고 가정 해 봅시다 피트 존스에 대한 데이터베이스 행이

    을 삭제

  • 마크 테일러 삽입 나는 AF를 작성 관리해야 첫 번째 두 부분을 수행하지만 세 번째 부분에 붙어있는 작업. 나는 기본적으로
    delete 
    from my_table 
    where (first, last) not in (values ('Joe', 'Smith'), ('Mark', 'Taylor')) 
    

    했다 JOOQ에서 매우 간단 "한 라이너"를 가지고 기대했다하지만 난 그것을 할 수있는 해당 자바 코드를 작동하지 않을 수 있습니다.

    이 주크 마스터는이 책을 읽었습니까?

    지나치게 눈에 띄는 부분이 있습니까?

  • 답변

    2
    귀하의 쿼리는 다음과 jOOQ 코드로 변환 할 수 있습니다

    :

    // Assuming this: 
    import static org.jooq.impl.DSL.*; 
    
    using(configuration) 
        .deleteFrom(MY_TABLE) 
        .where(row(MY_TABLE.FIRST, MY_TABLE.LAST).notIn(
         row("Joe", "Smith"), 
         row("Mark", "Taylor") 
        )) 
        .execute(); 
    

    이 행을 구성하는 DSL.row()을 사용하고 있습니다 가치 표현. ROW은 PostgreSQL의 선택적 키워드입니다. 방금 SQL 예제에서이를 생략했습니다. 다시

    http://www.jooq.org/doc/latest/manual/sql-building/conditional-expressions/in-predicate-degree-n

    +0

    감사 루카스, 아직 :

    는 수동의도> 1에 대한 IN 조건에 대한 섹션을 참조하십시오! –

    1

    기본 키와 좋은 연습을 삭제하는 것이 더 쉽습니다. 언제 까지나 거기로 불리는 두 사람은 존스 피트,이 같은 작동 안 :

    dsl.deleteFrom(MY_TABLE) 
    .where(MY_TABLE.first.eq("pete").and(MY_TABLE.last.eq("jones")).execute();