|
其他两种和我的写法差不多:
WITH
n AS (SELECT ROWNUM-1 n FROM DUAL CONNECT BY ROWNUM<=10)
SELECT * FROM (
SELECT n1.n||n2.n||n3.n||n4.n||n5.n||n6.n||n7.n||n8.n||n9.n path
,REPLACE(n1.n||n2.n||n3.n,GREATEST(n1.n,n2.n,n3.n))
*REPLACE(n4.n||n5.n||n6.n,GREATEST(n4.n,n5.n,n6.n))
*REPLACE(n7.n||n8.n||n9.n,GREATEST(n7.n,n8.n,n9.n)) m
FROM n n1,n n2,n n3,n n4,n n5,n n6,n n7,n n8,n n9
WHERE n1.n NOT IN (n2.n,n3.n,n4.n,n5.n,n6.n,n7.n,n8.n,n9.n)
AND n1.n<n7.n
AND n2.n NOT IN (n3.n,n4.n,n5.n,n6.n,n7.n,n8.n,n9.n)
AND n3.n NOT IN (n4.n,n5.n,n6.n,n7.n,n8.n,n9.n)
AND n4.n NOT IN (n5.n,n6.n,n7.n,n8.n,n9.n)
AND n5.n NOT IN (n6.n,n7.n,n8.n,n9.n)
AND n6.n NOT IN (n7.n,n8.n,n9.n)
AND n7.n NOT IN (n8.n,n9.n)
AND n8.n<>n9.n
AND n1.n-n2.n NOT IN (1,-1) AND n2.n-n3.n NOT IN (1,-1)
AND n4.n-n5.n NOT IN (1,-1) AND n5.n-n6.n NOT IN (1,-1)
AND n7.n-n8.n NOT IN (1,-1) AND n8.n-n9.n NOT IN (1,-1)
AND n1.n-n4.n NOT IN (1,-1) AND n4.n-n7.n NOT IN (1,-1)
AND n2.n-n5.n NOT IN (1,-1) AND n5.n-n8.n NOT IN (1,-1)
AND n3.n-n6.n NOT IN (1,-1) AND n6.n-n9.n NOT IN (1,-1)
ORDER BY 2 DESC
)
WHERE ROWNUM=1;
WITH
n AS (SELECT ROWNUM-1 n FROM DUAL CONNECT BY ROWNUM<=10)
SELECT * FROM (
SELECT n1.n||n2.n||n3.n||n4.n||n5.n||n6.n||n7.n||n8.n||n9.n path
,REPLACE(n1.n||n2.n||n3.n,GREATEST(n1.n,n2.n,n3.n))
*REPLACE(n4.n||n5.n||n6.n,GREATEST(n4.n,n5.n,n6.n))
*REPLACE(n7.n||n8.n||n9.n,GREATEST(n7.n,n8.n,n9.n)) m
FROM n n1,n n2,n n3,n n4,n n5,n n6,n n7,n n8,n n9
WHERE n1.n NOT IN (n2.n,n3.n,n4.n,n5.n,n6.n,n7.n,n8.n,n9.n)
AND n1.n<n7.n
AND n2.n NOT IN (n3.n,n4.n,n5.n,n6.n,n7.n,n8.n,n9.n)
AND n3.n NOT IN (n4.n,n5.n,n6.n,n7.n,n8.n,n9.n)
AND n4.n NOT IN (n5.n,n6.n,n7.n,n8.n,n9.n)
AND n5.n NOT IN (n6.n,n7.n,n8.n,n9.n)
AND n6.n NOT IN (n7.n,n8.n,n9.n)
AND n7.n NOT IN (n8.n,n9.n)
AND n8.n<>n9.n
AND ABS(n1.n-n2.n)<>1 AND ABS(n2.n-n3.n)<>1
AND ABS(n4.n-n5.n)<>1 AND ABS(n5.n-n6.n)<>1
AND ABS(n7.n-n8.n)<>1 AND ABS(n8.n-n9.n)<>1
AND ABS(n1.n-n4.n)<>1 AND ABS(n4.n-n7.n)<>1
AND ABS(n2.n-n5.n)<>1 AND ABS(n5.n-n8.n)<>1
AND ABS(n3.n-n6.n)<>1 AND ABS(n6.n-n9.n)<>1
ORDER BY 2 DESC
)
WHERE ROWNUM=1;
反复运行三个写法,用时都在 1.69 ~ 1.76 波动。
加上你的肉:
WITH
n AS (SELECT ROWNUM-1 n FROM DUAL CONNECT BY ROWNUM<=10)
SELECT * FROM (
SELECT n1.n||n2.n||n3.n||n4.n||n5.n||n6.n||n7.n||n8.n||n9.n path
,REPLACE(n1.n||n2.n||n3.n,GREATEST(n1.n,n2.n,n3.n))
*REPLACE(n4.n||n5.n||n6.n,GREATEST(n4.n,n5.n,n6.n))
*REPLACE(n7.n||n8.n||n9.n,GREATEST(n7.n,n8.n,n9.n)) m
FROM n n1,n n2,n n3,n n4,n n5,n n6,n n7,n n8,n n9
WHERE n1.n NOT IN (n2.n,n3.n,n4.n,n5.n,n6.n,n7.n,n8.n,n9.n)
AND n1.n<n7.n
AND n2.n NOT IN (n3.n,n4.n,n5.n,n6.n,n7.n,n8.n,n9.n)
AND n3.n NOT IN (n4.n,n5.n,n6.n,n7.n,n8.n,n9.n)
AND n4.n NOT IN (n5.n,n6.n,n7.n,n8.n,n9.n)
AND n5.n NOT IN (n6.n,n7.n,n8.n,n9.n)
AND n6.n NOT IN (n7.n,n8.n,n9.n)
AND n7.n NOT IN (n8.n,n9.n)
AND n8.n<>n9.n
AND n1.n-n2.n NOT IN (1,-1) AND n2.n-n3.n NOT IN (1,-1)
AND n4.n-n5.n NOT IN (1,-1) AND n5.n-n6.n NOT IN (1,-1)
AND n7.n-n8.n NOT IN (1,-1) AND n8.n-n9.n NOT IN (1,-1)
AND n1.n-n4.n NOT IN (1,-1) AND n4.n-n7.n NOT IN (1,-1)
AND n2.n-n5.n NOT IN (1,-1) AND n5.n-n8.n NOT IN (1,-1)
AND n3.n-n6.n NOT IN (1,-1) AND n6.n-n9.n NOT IN (1,-1)
AND (n1.n,n3.n) IN ((4,5),(5,4),(6,7),(7,6))
AND (n4.n,n6.n) IN ((4,5),(5,4),(6,7),(7,6),(8,9),(9,8))
AND (n7.n,n9.n) IN ((6,7),(7,6),(8,9),(9,8))
ORDER BY 2 DESC
)
WHERE ROWNUM=1;
Elapsed: 00:00:00.01
 |
|