回答

收藏

如何在mysql中选择具有相同值集的列?

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

我的表是:# J* D0 d$ L& U3 o
patients(pid,name,city)' D" I! l7 |% ?" A( P$ _( y
disease(did,dname)
" c2 @( O! I: A7 Y3 Khas_disease(did,pid)
$ h( @; Q2 [! m1 E5 r7 v我想列出一组具有相同疾病的患者。pid和did分别是患者和疾病表中的主键,并且是has_disease表中的外键。
: I# D6 [$ F3 a1 L, _4 a0 `样本数据:
! h) B4 f' {; c# Y+ B/ l耐心2 a& w" |3 v( g4 ~0 P& y/ j
pid    name   city9 `+ r- ^1 S* l; i* b
1      John    X
( g8 ^% a0 v6 {, j2      Jim     Y
" r' a8 c# _/ L) f6 P3      Jack    Z
# m" R% l2 g( U1 c疾病3 e( n! M( J- f
did     dname
2 E! G$ H- e- Z& q2 R0 v  1      Typhoid
5 G) g5 p* d7 z  2      Malaria: O5 }- ~+ D) n* d- d2 t8 d. P
  3      ViralFever
. Z  j. N% o! h+ M0 D. i( Ehas_disease7 c+ n" D1 I5 E
did     pid
# x. B+ l# R4 r( q* j7 r  1       1
5 d6 L' F8 Q( T  1       25 Y0 z9 a1 G3 C2 H+ h/ f. @
  3       24 l0 M, Z& q6 c* r5 {
  1       3
4 e0 ]0 V% s& ]7 ?8 p  3       3
6 |, A8 }' J& L- Y$ V8 g, k2 H以上数据的答案是Jim and Jack因为它们具有完全相同的疾病1和3,即疟疾和病毒热。我想知道如何在mysql中实现这一点。 。6 O& B0 G4 {8 b6 o+ V" x' @
               
& R/ v; D# E1 H7 G; m1 G解决方案:
6 o1 A1 w8 Y0 v6 y                - G# x( }. I( p
3 p. b. {2 U. ]; C% e0 B
8 h( T/ ]  ~  M% s7 J
                select p.*, GROUP_CONCAT(d.did SEPARATOR ', ') AS all_dids
/ n3 a( [: f4 U; k6 D3 i% x; ?5 a/ }from patients p 1 ?% A  J, y8 B5 g
     JOIN has_disease hd ON p.pid=hd.pid7 c0 q0 g1 D- w& \9 o& l# O
     JOIN disease d ON d.did=hd.did
8 @" C9 F; i$ o" d" dGROUP BY p.pid;
" b: w: s4 ?2 i8 @* I7 ~# f该查询返回给我们患者及其疾病。: v4 F+ {" m4 R7 d+ c: j, S$ ?5 U7 a* y
SELECT *
- ?/ h5 D" L7 t$ GFROM
: L! G/ {* M% {5 S4 A0 I6 S    (select p.*, GROUP_CONCAT(d.did SEPARATOR ', ') AS all_dids; a! r- M% `& N
    from patients p ; c1 @6 ]* |2 v- j
         JOIN has_disease hd ON p.pid=hd.pid
0 }( W! Y, z4 a( O- K+ ]         JOIN disease d ON d.did=hd.did
7 }! k  q. C* s6 r  Q+ `    GROUP BY p.pid) P17 L" U$ v' w7 q; a
    JOIN
/ `2 c7 F) k+ D9 r- n6 f    (select p.*, GROUP_CONCAT(d.did SEPARATOR ', ') AS all_dids  D0 Y! r$ U$ S# _6 J
    from patients p & j' Z* T5 P) B( X2 b
         JOIN has_disease hd ON p.pid=hd.pid
8 d$ \$ x5 ]  _) y         JOIN disease d ON d.did=hd.did
+ p2 u! |8 R, s7 ^, }8 P    GROUP BY p.pid) P2 ON p1.all_dids=p2.all_dids and p1.pidp2.pid4 C8 W* E3 b- t( ^
通过完整的剂量列表比较2组患者,并将pid保留为相同的剂量列表,但不同的pid
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则