回答

收藏

我想将一个表中的行分配给另一表中的行,这在SQL oracle中可以采用相等数量

技术问答 技术问答 160 人阅读 | 0 人回复 | 2023-09-12

我正在尝试编写一个SQL查询,该查询会将记录从一个表分发到另一个表,该表的数目相同。
6 ?  h" ^. Z' L8 \在此示例中,我有两个表Students和Teachers,我想将学生分配给每个老师。
3 m0 }7 p+ v6 B, M4 e. p+ i学生:(Adam,Bennet,Elmer,Justin,Louis,Noah,Jack)
, H/ ~# E7 L3 m- M9 {老师:(Leo,Kyle,Ethan)( |2 p: b% b6 _9 J$ ?
注意:
4 o" ?$ s# T8 t' ^* z[ol]一个学生最多只能有一位老师& n: k1 D% d/ Z, ?9 ^% v
每位老师的学生人数应与其他老师的人数相同… / l9 f5 `: z8 C3 H( P
…除非学生人数不是教师人数的确切倍数,否则在这种情况下,必须尽可能平均地在教师之间平均分配学生
2 ]5 L% W- K6 t8 P' a3 }[/ol]3 c' J# \* b4 ?/ O, v
例如,如果我们有七个学生和三个老师,则前两个老师将带两个学生,最后一个将带三个学生。
9 O2 Z. |' v8 S" W! e结果:
( J: {3 @6 H; ~! [1 U1 RStudent | Teacher9 D1 H9 h0 K; B9 j! q% s3 b
--------+--------
" q% K1 D4 ^! I9 G3 r# o- UAdam    | Leo
# G* d1 `1 J+ k( W$ B6 {Bennet  | Leo$ `. d) ~  [* M
Elmer   | Kyle7 a& i* _0 C  x
Justin  | Kyle
# [* R1 K7 _. D0 hLouis   | Ethan1 ~+ q. P3 a& }! d! ]  f, j3 f. n/ \
Noah    | Ethan% q& Z- t$ b2 B3 M3 z/ k
Jack    | Ethan+ f( \- [  R, x+ P' D2 ^+ M
如何在Oracle SQL中做到这一点?
# }6 x# ^5 h6 x/ X0 {( _$ Z( D' i也:如果我要增加课程,并且学生必须在不同的强迫下有不同的老师…结果:
) X8 G2 N( p, N2 l  JStudent | Teacher | coerces
- Q+ y, j: Y4 b1 T$ s--------+---------+---------' q3 F1 q4 [4 g. I1 M. ^0 H
Adam    | Leo     |  1
8 w$ D! E! H5 f+ DBennet  | Leo     |  1& m/ ~5 h  y. r: i$ r" C$ ^4 T, z
Elmer   | Kyle    |  1' d) `# `8 [# B# o. z: y- ~& @1 }
Justin  | Kyle    |  13 R7 Q9 d4 `9 S0 D" ]7 @/ _/ m
Louis   | Ethan   |  1
# B7 L4 u) P5 b: s0 C: B! HNoah    | Ethan   |  1
3 e& X. S4 H( W# p+ aJack    | Ethan   |  1
  [- L/ O/ Z. P; e# l3 eLouis   | Leo     |  2
( ~' W+ E5 @1 \- s- t9 N1 v. RNoah    | Leo     |  2
, F- r8 ], Q% w9 [4 \0 a2 K7 i1 rJack    | Kyle    |  2* B' p! G9 n; X8 _' f
Adam    | Kyle    |  27 B3 q7 h) e0 l% I; _* y
Bennet  | Ethan   |  2; Q: s+ j4 [( e
Elmer   | Ethan   |  2
$ K' i* u2 {# W, o: w3 Z. Z' d" y: tJustin  | Ethan   |  2
0 L- b/ D% N3 i' R) G
8 ~/ ]0 w- q* k4 A: ]/ r3 M6 d我该怎么办?2 h8 l) ?+ Z2 m1 L& Y/ i
                ' `9 F: u; g  E, u; P( N
解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则