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`;
jOOQ 버전 3.15부터는 표준 SQL
VALUES
构造器表示为org.jooq.Select
。它只能表示为org.jooq.Table
을 변환할 수 있는 방법이 없습니다. https://github.com/jOOQ/jOOQ/issues/5871을 참조하세요.아직 jOOQ DSL을 사용하여 완전히 호환되는 구문을 표현할 수는 없지만
에서 표현할 수 있습니다. 으아악FROM
子句中使用VALUES
:이렇게 하면 예상한 것과 거의 동일한 계획이 생성됩니다. 또 다른 해결책은 Pure SQL 템플릿을 사용하는 것입니다.