从表中选择行,其中另一个具有相同ID的表中的行在另一列中具有特定值
技术问答
264 人阅读
|
0 人回复
|
2023-09-14
|
在MySQL中:3 t$ n, V; _1 ]1 p2 O- C+ d
如果我们有两个表:
- C6 V% U7 @& m# A( Rcomments4 Q* ?- Z1 w3 Y/ l
key | value
z$ K$ s- }$ |& }" r1 H u# S=================
( |$ Y8 E+ q' n1 | foo7 i/ p; @! k# h1 e o" R6 m+ a
2 | bar# p" r5 A1 Q* K4 I3 x
3 | foobar
( k# L& M+ j9 H9 Q4 | barfoo
1 Q4 x4 G I( T) D和:
% P2 j. p2 F; @$ Imeta
: D# w, F9 S) [$ Z. ~comment_key | value g' V. k7 J, l8 ~6 s
=========================
1 _0 D' @, E, p* s9 H c: `1 | 1
/ |: w' w: ^" X% U1 W9 r2 | 15 ?! |6 G: m2 Y5 Y
3 | 2, u0 h$ D6 G3 \
4 | 1
* b; N% D" }( h6 R我想从意见comment表中具有相应comment_key的meta具有特定表value(该value列meta表)。9 X+ q. C: |" P( ]: k3 M1 l3 s
例如,我想选择所有从该行comment有一个表value中1的meta表:. i8 A: C% I6 h2 Y) j
我希望这些结果:9 Y/ K/ ]- `' |# X: E: j
key | value
/ S' {4 R% f1 Y4 ]=================8 Z) w" Q0 g8 j
1 | foo# V; {: a/ ^4 L
2 | bar6 O; _+ F% Y2 Z) F4 p6 T, n
4 | barfoo
$ D2 t* ^$ g$ j$ v9 Q5 O; M而如果我选择所有从该行comment表中有一个value的2在meta表:5 Z4 z5 I$ c. l/ A: r
我希望得到这样的结果:
+ x4 g% X) D: n P8 R6 ykey | value
% O; F4 @8 @; v# A% X3 K8 a=================
' ?) R+ w$ L0 r% U. Y" D3 | foobar' H/ }) Q0 Q$ \
我真的希望有人能提供帮助,谢谢大家!: b2 X @. G8 n2 m9 w$ e
我想我需要参加吗?任何指针都将是很好的,并且如果可能的话,可以做一个简短的解释,以便我可以找出我要去的地方->这样我下次就知道了!
( @7 r7 [5 ?. Y9 }! K
0 f; n! _, y3 S解决方案:1 I2 q/ g% d1 {. V5 Z7 c8 _/ [
5 D. C& K' ?( X+ D8 U
" i7 ]- [3 X; S: k
+ L1 {* m( F3 D2 j7 W* o* S4 u 实际上,我不建议为此使用JOIN-. z: w" V4 M8 D9 J6 a. u% ^
或更确切地说,我建议使用“半联接”,这是一个关系代数概念,未在SQL中直接表达。半联接本质上是一种联接,您只想从一个表中检索记录,但前提是它们在不同的表中具有相应的记录。
, A9 y' K4 f; m& d) K7 H在SQL符号,这个概念间接表达,通过使用一个IN子句,具有子查询:
4 I) k* }) z$ ISELECT key, value
/ d/ Y# C3 O4 ]5 C C; C. ^8 H FROM comments: p$ E' N! |' J$ W! U2 ?* Q1 J
WHERE key IN
9 F, R5 d ?; F) @6 S ( SELECT comment_key
! R# u" C! W0 G, _6 ^$ S FROM meta; R! [2 }2 \. K$ V
WHERE value = 1
! u5 H ]8 J% L, P( ?% Z )
* K* Q& a v* G0 f4 l;
2 d8 O' ^: s* D Z8 ~& ]; i% |' d(MySQL实际上最终会将其内部翻译回半联接-本质上是一种简并的内部联接-但该IN子句是在原始SQL中表达它的自然方式。) |
|
|
|
|
|