제목을 다음과 같이 다시 작성합니다. MySQL 구문의 WITH `cte` AS(VALUES ROW(1), ROW(2), ROW(n))를 jOOQ DSL로 변환하는 방법
P粉794177659
P粉794177659 2024-01-16 14:51:40
0
1
364

MySQL에 대한 SQL 쿼리가 있습니다.

으아아아

jOOQ DSL로 변환한 후:

으아아아

결과는 다음과 같습니다.

으아아아

그러나 설명에는 중복된 UNION이 표시됩니다.

으아아아

다른 MySQL 구문을 사용하여 SQL을 다시 작성했습니다. - VALUES ROW(1), ROW(2), ROW(n):

으아아아

동일한 결과:

으아아아

그러나 쿼리 플래너는 UNION을 사용하지 않습니다:

으아아아

질문: 최종 스크립트를 jOOQ DSL로 변환하는 방법은 무엇입니까? 할 수 있는 방법이 없어요

WITH `cte` AS (
    ( SELECT 1431655747 AS `n` FROM DUAL ) UNION ALL
    ( SELECT 1431655733 AS `n` FROM DUAL ) UNION ALL
    ( SELECT 715827794 AS `n` FROM DUAL ) UNION ALL
    ( SELECT 715827865 AS `n` FROM DUAL ) UNION ALL
    ( SELECT 1073741809 AS `n` FROM DUAL ) UNION ALL
    ( SELECT 1073741759 AS `n` FROM DUAL ) UNION ALL
    ( SELECT 715827800 AS `n` FROM DUAL ) UNION ALL
    ( SELECT 1431655693 AS `n` FROM DUAL ) UNION ALL
    ( SELECT 715827789 AS `n` FROM DUAL ) UNION ALL
    ( SELECT 715827838 AS `n` FROM DUAL ) UNION ALL
    ( SELECT 715827823 AS `n` FROM DUAL ) UNION ALL
( SELECT 858993391 AS `n` FROM DUAL )) SELECT
`cte`.`n`,
`maxmind_country`.`country`.`name_en` 
FROM
    `cte`
    JOIN `maxmind_country`.`ipv4` ON `cte`.`n` BETWEEN `maxmind_country`.`ipv4`.`start_int` 
    AND `maxmind_country`.`ipv4`.`last_int`
    JOIN `maxmind_country`.`country` ON `maxmind_country`.`country`.`geoname_id` = `maxmind_country`.`ipv4`.`v_geoname_id`;

P粉794177659
P粉794177659

모든 응답(1)
P粉752812853

jOOQ 버전 3.15부터는 표준 SQL VALUES构造器表示为org.jooq.Select。它只能表示为org.jooq.Table을 변환할 수 있는 방법이 없습니다. https://github.com/jOOQ/jOOQ/issues/5871을 참조하세요.

아직 jOOQ DSL을 사용하여 완전히 호환되는 구문을 표현할 수는 없지만 FROM子句中使用VALUES:

에서 표현할 수 있습니다. 으아악

이렇게 하면 예상한 것과 거의 동일한 계획이 생성됩니다. 또 다른 해결책은 Pure SQL 템플릿을 사용하는 것입니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿