oracle 在SQL中计算子集

lxkprmvk  于 2023-11-17  发布在  Oracle
关注(0)|答案(2)|浏览(156)

我有一个表t(一个字符),有3个值“a”“b”“c”我想计算一个唯一的子集的carbohydrate产品没有你的身份。
Oracle SQL
从t t1,t t2中选择t1.a t1 a,t2.a t2 a;

a   a
a   b
a   c
b   a
b   b
b   c
c   a
c   b
c   c

字符串
删除相同条目ok easy
从t t1,t t2中选择t1.a t1 a,t2.a t2 a,其中t1.a<>t2.a;

a   b
a   c
b   a
b   c
c   a
c   b


但是我想消除最后一个结果集中的duplets,例如,a b和b a对我来说是一样的,我想要其中之一,这样我想要的结果就可以是

a   b
a   c
c   b


我如何才能实现这一点与SQL语句(甲骨文风格)(没有过程或任何迭代编程请)?
从t t1,t t2中选择t1.a t1 a,t2.a t2 a,其中t1.a<>t2.a和t2.a不在(从t t3中选择a,其中t3.a=t1.a);
不更改rresult集
解释我想要在一个grphical风格:

a b c 
a- - -
b* - -
c* * -


也行

a b c 
a- * *
b- - *
c- - -


我只想在上面的表格中的 * 组合{(b,a),(c,a),(c,b)}或{(a,b),(a,c),(b,c)}这在SQL中是可能的吗?

92dk7w1h

92dk7w1h1#

首先,你真的应该学习ANSI SQL JOIN语法,你正在使用的逗号分隔的连接语法已经30多年没有被认为是好的做法了。
您可以使用LEAST和GREATEST来对列进行排序,即turn B| a变成a| B
然后使用DISTINCT删除重复项

mzmfm0qo

mzmfm0qo2#

使用分层查询(避免自联接):

SELECT PRIOR value AS value1,
       value AS value2
FROM   table_name
WHERE  LEVEL = 2
CONNECT BY PRIOR value < value

字符串
其中,对于样本数据:

CREATE TABLE table_name (value) AS
SELECT 'a' FROM DUAL UNION ALL
SELECT 'b' FROM DUAL UNION ALL
SELECT 'c' FROM DUAL;


产出:
| VALUE1| VALUE2|
| --|--|
| 一|B|
| 一|C|
| B| C|
fiddle

相关问题