回答

收藏

引用同一表的外键

技术问答 技术问答 499 人阅读 | 0 人回复 | 2023-09-14

进行了一次面试,下面是表格和结构
. U0 H4 l, e$ [' L" h1 ] Table Person = id, name, dob, dod, mother_id, father_id
9 p' |% J. d$ Y. B- Y6 M; k Primary Key (id)5 _; x( q( G0 c% y
Foreign Key mother_id references Person
% n2 I8 b* J; X  n Foreign Key father_id references Person. q! u% }( p" O& q
有人问
3 l$ m' s5 ?+ o8 c4 n% K8 Q
& n7 c: G9 Q1 q0 |' q$ G[ol]“选择所有母亲”' p7 U$ }; _) c$ F- D. }
“选择那些是“约翰·史密斯”和“简”的孩子" b5 E9 Q8 t3 S" [+ i' G, z
' S9 w7 m, c; C, d: a  ]9 Y' B
[/ol]& f3 x. {- Y" C
, ~- e' p' c: ^# Z% w5 f) S
我很困惑,因为我假设外键会像往常一样与其他表链接。但是那时我失败了。有人知道实际答案和原因吗?2 w( l/ o, E$ H& K& O, d2 t
               
7 s" _8 w; n$ w, U6 X/ i/ ^解决方案:
! q- m: ~. n3 f/ v) D               
7 p( g, f$ V, ?* p2 J* }2 X9 n) D4 G- O4 _/ O/ ^; R
9 W/ X5 N9 s2 O5 ~0 t
                这种数据结构称为“自引用表”) A5 ?1 t( A+ e' i' q" K% S8 Y
SELECT DISTINCT mothers.*
2 P5 M: ?/ z+ h, r1 r& d2 v( YFROM person
5 I6 i- W0 P: }, ?8 e/ j; n4 D5 ]    inner join person mothers on person.mother_id = mothers.id
! Q) F' m3 l7 L% t6 u8 H+ |& \
SELECT person.*6 p  h+ X  z' Z* w5 }2 P4 E
FROM person
5 j6 i0 [/ `  o! h    inner join person fathers on person.father_id = fathers.id9 U3 P; p* V+ |; `# Y
    inner join person mothers on person.mother_id = mothers.id
7 {/ p. ~# q, h, ?  d9 m4 uWHERE
8 p) T3 ]; B, o& D+ p    fathers.name='john smith'
& B% Z* i7 B% v& u' x/ oand
- D( y% h9 j/ N" A! t    mothers.name='jane'
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则