回答

收藏

SQL两个表之间的所有可能的循环组合

技术问答 技术问答 203 人阅读 | 0 人回复 | 2023-09-13

给定表:. Y/ C" H  J6 G$ D
create table Person( Name varchar(100) )
" d* |: C5 u$ n' Q- x名称对于所有人而言都是唯一的1 O) |0 h$ W% Q" O
哪种SQL查询可以生成所有可能的n!/(((n-2)!2!)循环组合?4 w6 V# e$ R5 V# E0 N
假定Person的基数始终等于4
( i+ y8 S' u9 _" ?$ S示例人物= {‘Anna’,’Jerome’,’Patrick’,’Michael’)* _5 w4 J# r5 C: a
输出:7 H0 e* b1 M" S; e) D% h. X
Anna, Jerome
. O% i( A" X% |! R2 e3 eAnna, Patrick
: }- a+ g1 R- B8 r& M% P0 zAnna, Michael1 _5 C& M. S2 J
Jerome, Patrick
- e2 O+ @% B' i2 g2 b7 ~7 |Jerome, Michael
- b: _0 }$ [0 y$ w) p/ SPatrick, Michael
$ J3 U5 J5 D' P( ?9 I任何帮助,将不胜感激。谢谢!! |  H1 U6 E' R% J! [' x6 p
这是我的答案(我使用了oracle SQL):
! N% x" @7 D5 j$ }select P1.NAME PERSON1, P2.NAME PERSON2
/ \4 c2 |3 x7 D! a# D, [4 \$ {  from (select rownum RNUM, NAME7 x. ?& V1 O! Z7 [) @9 t2 U' o5 t
        from PERSON) P1,
1 ^% t+ L5 Q; U0 z; o7 j  q4 N; Q2 q. Z       (select rownum RNUM, NAME3 p2 B) f$ V8 ?* D! q
          from PERSON) P2  T5 C8 o7 Y2 @! v5 h. {
where P1.RNUM < P2.RNUM! ]* t* |( b4 r$ h
               
& u6 Z  V9 M( v解决方案:
6 D$ T$ Z  e3 F0 Z               
7 L0 [2 p8 Y4 I& N9 P  e' g4 P+ _# ^
  l1 d* ^$ @6 T8 H
                select P1.NAME PERSON1, P2.NAME PERSON2
/ D$ F8 k3 I$ ^' h9 B4 }; B" @  from (select rownum RNUM, NAME
; A$ L' P# z" ]        from PERSON) P1,
  y) p. k+ y; V       (select rownum RNUM, NAME3 X' R; ~: b! ^$ I- B7 F5 n
          from PERSON) P2
& `3 P2 K$ G7 d where P1.RNUM < P2.RNUM
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则