从表中选择行,其中另一个具有相同ID的表中的行在另一列中具有特定值
技术问答
218 人阅读
|
0 人回复
|
2023-09-14
|
在MySQL中:
3 X. j7 a1 M' z- }3 G) C1 Y如果我们有两个表:( @, c7 x. W0 O/ M, S" U
comments/ L+ M- n' w/ `" B3 M4 l
key | value, h( U% ~ }" q; _0 M/ u
=================% W( w+ B4 ^& t: L- \2 |9 S
1 | foo' h" E* {# M- E9 V5 Z% s
2 | bar. s! ], V# S9 l
3 | foobar1 a# n" R' `- [' N" K) Z* F9 t
4 | barfoo
% P! `) |# F: G$ b+ z和:
4 A ]" u# `/ V5 J9 M$ G3 L9 wmeta
$ {# A' O. b8 n( H, E- scomment_key | value; k! k' d9 ^" ?0 t5 R9 s, e
=========================% C; s; z% M( k* @7 }
1 | 1( m ~: g: G6 h. s+ v% _
2 | 1
, y% w0 [+ I+ T- b0 e; ?# q3 | 28 x) I1 k- X1 E3 \3 W) [
4 | 1
- q3 |3 V% N5 m7 I我想从意见comment表中具有相应comment_key的meta具有特定表value(该value列meta表)。
7 }" R: F+ N( C5 K例如,我想选择所有从该行comment有一个表value中1的meta表:
* f+ v9 I. |9 f( i- T/ f* A我希望这些结果:- x6 R3 {# d( R
key | value
2 O1 K/ y9 v) S: A, o `=================" M/ d( b4 D* j1 S" s( y
1 | foo- q5 g' k2 q/ h$ x
2 | bar
+ {+ F- l5 G% t% X4 | barfoo/ t Y; h8 H, I% s! ^0 c7 e
而如果我选择所有从该行comment表中有一个value的2在meta表:
5 f7 B* X* [ K5 ^# ?我希望得到这样的结果:
! E. F, Q0 J# e' [# q3 Jkey | value
0 M5 T/ E: C& |- F( B+ v=================
$ P( j0 D8 f. R7 c3 | foobar% L g& C! _/ k6 B. q) m" d
我真的希望有人能提供帮助,谢谢大家!
/ ?8 j, ]6 O/ V& D4 q* N+ k$ b我想我需要参加吗?任何指针都将是很好的,并且如果可能的话,可以做一个简短的解释,以便我可以找出我要去的地方->这样我下次就知道了!% W6 p, O$ |2 ?" k5 {, E
1 q; h: _1 j6 X解决方案:: d' Y: Q) }( v7 r
4 H9 T6 ]% E6 M( a) h
) h: Q! u( W. _% o5 k/ E
0 {8 \1 [9 V# j
实际上,我不建议为此使用JOIN-
0 e% b# f+ A1 ]4 d4 F; O+ c7 i9 C或更确切地说,我建议使用“半联接”,这是一个关系代数概念,未在SQL中直接表达。半联接本质上是一种联接,您只想从一个表中检索记录,但前提是它们在不同的表中具有相应的记录。0 X5 I( }( [. S6 W- y: s: C
在SQL符号,这个概念间接表达,通过使用一个IN子句,具有子查询:
4 o; E$ R. l- e/ f" dSELECT key, value
3 H7 w- Y- b* _) q3 D FROM comments
/ E; c1 N6 Z, T6 G; ^* } WHERE key IN
" c0 a8 i. d1 P2 | ( SELECT comment_key! o: x3 d+ S4 c: R8 Q# |8 f% h
FROM meta
; j8 L& F2 ^ u+ O. a9 c WHERE value = 1! @" @8 r' L/ T8 s3 o
)
, N3 j0 u2 y" P) V, S* ^;
5 c$ F$ V3 m# L5 ]8 U1 K7 v" h(MySQL实际上最终会将其内部翻译回半联接-本质上是一种简并的内部联接-但该IN子句是在原始SQL中表达它的自然方式。) |
|
|
|
|
|