Oracle 有没有一种简单的方法来查询 n 个字段的唯一组合。我有非常简单的两场解决方案:
CREATE TABLE combinations AS
SELECT 1 AS n
FROM DUAL
UNION ALL
SELECT 2
FROM DUAL;
查询唯一组合:
SELECT LEAST(x.a, x.b),
GREATEST(x.a,x.b)
FROM (SELECT c1.n a,
c2.n b
FROM combinations c1
CROSS JOIN combinations c2
WHERE c1.n <> c2.n) x
GROUP BY LEAST(x.a, x.b), GREATEST(x.a,x.b);
根据该查询,1,2 和 2,1 被认为是相同的。不幸的是,它不适用于 3 字段结构(例如 1,2,3 必须被视为与 3,1,2 相同,因为值的顺序并不重要)。 Oracle 分析函数是否为这个问题提供了适当的解决方案?您能推荐一些特定的 Oracle 分析函数吗?
您对 2 列的查询可以重写如下:
SELECT
c1.n,
c2.n
FROM combinations c1
INNER JOIN combinations c2 ON c1.n < c2.n
对于 3 列,您需要进行一些添加(以粗体突出显示):
SELECT
c1.n,
c2.n,
c3.n
FROM combinations c1
INNER JOIN combinations c2 ON c1.n < c2.n
INNER JOIN combinations c3 ON c2.n < c3.n
我相信您现在可以轻松猜测如何扩展更多列。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)