简体   繁体   English

单个SELECT语句可检索1列值的所有可能组合Oracle

[英]Single SELECT Statement to Retrieve All Possible Combinations of 1 Columns Values Oracle

Say I have a column: 说我有一列:

COLUMN
Bread
Butter
Toast
Jam

I need a single efficient select query that will return: 我需要一个有效的选择查询,该查询将返回:

COLUMN
Bread Butter
Bread Toast
Bread Jam
Butter Bread
Butter Toast
Butter Jam
Toast Bread
Toast Butter
Toast Jam
Jam Bread
Jam Butter
Jam Toast

The following query should do what you want, it joins the table on itself and removes the rows matching an item to itself. 以下查询应执行您想要的操作,它将自身连接到表并删除与自身匹配的行。

SELECT 
      T1.COLUMN || ' ' || T2.COLUMN
FROM
      TABLE T1
JOIN
       TABLE T2 ON T2.COLUMN <> T1.COLUMN
select c1 || ' ' || c2
from 
( select column as c1 from table ),
( select column as c2 from table )
where c1 <> c2 -- this avoids the commented 'jam jam' :)

Isn't that just a cross join with a simple filter? 这不只是带有简单过滤器的交叉联接吗?

with [Data] as (
         select *
         from (values
             (N'Bread')
           , (N'Butter')
           , (N'Toast')
           , (N'Jam')
         ) as a ([Value])
     )
select a.[Value] + N' ' + b.[Value] as [Value]
from [Data] as a
cross join [Data] as b
where a.[Value] <> b.[Value];

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM