回答

收藏

如果所有孩子均符合条件,则选择父母

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

我有这样设置的表:
) R! q9 m- L  J7 q5 pParent. z! K7 o1 u7 X" d
------) d1 q5 U! j/ w& g) g
id, ...
) m& \. z, p3 |' f. wChild* ], K. o# S8 G( c
-----# P+ a8 M+ R  \7 z0 K  ~
id, parent_id, x, y/ I9 l, ^" Y. y5 O4 [% ?
如果Child中包含给定parent_id的 所有 行均符合涉及x和y的条件(在我的情况下,x =
3 U9 e# Y7 Z/ K: _1 p3 S) Ty),我想找到Parents或不同的parent_id 。0 x. ]$ m( Q) [/ m9 T9 a, ?/ y/ h
例如:* @5 U# z" v/ I& {3 d" A* J7 _
Parent8 a! G  y- r& {' `
------
1 o9 o4 h, m/ i3 j  }% ?id! L' d7 z% D$ Q& K6 `
1
. C. |, w2 @3 V* c. B! g7 k& T4 {3 a 2
( H; g" D! h3 J9 }* k! R% W 3
0 \( t, Z$ U/ M, j! ]Child
7 q1 n! ~# G" f0 F( f5 d  Iid, parent_id, x, y
5 e9 H1 e0 ~# j3 C% ~, m4 y1,      1,     2, 3
( M4 S" r# G  u- g% G2,      1,     3, 47 ~) m( o' K9 b
3,      2,     5, 5
; X* ~. }7 n. {4,      2,     6, 7
1 C7 [/ N* p/ h: L* [5,      3,     8, 8, N3 |) x3 L' _6 R4 k' z' b6 }/ f
6,      3,     9, 93 K! q$ B" T4 i6 `" L# ^2 W) f
将会得到3。当前,我有一个查询,查找 任何子级 都符合条件的parent_ids
, \# X  x# p: i- M) Z5 @. [5 v。然后,我用它来检索那些记录,并在所有子级都符合条件的情况下在代码中检查它们。通过示例数据,我得到parent_id  E+ L% w5 W3 g
2和3,获得所有子代的两个父记录,然后求值。如果可能,我想通过一个查询来执行此操作。
4 B& h* v* B: v& s2 Q/ L               
( b2 ^' E: c$ z解决方案:
' O/ S4 X1 q7 y                * O5 g! I0 M$ j. F
6 P3 w) _$ e8 p+ S

' t, d- }7 K" }$ c) N* G- M                您可以使用 NOT EXISTS
) Y0 K9 E, B& `( m- Z9 ]# m( T8 wSELECT id
: I, O9 n# v9 e! fFROM Parent p( [. Z6 M6 R" h9 b( Y' X
WHERE NOT EXISTS# t  O* K3 p' M
(
5 ]6 _5 C; c; |+ D- m" K' g   SELECT 1 FROM Child c5 l! u: v5 u8 k. c0 o  D
   WHERE c.parent_Id = p.id) b, ?, ?& u7 k
   AND c.x  c.y
  A# B' X" u+ b5 f% K$ F)/ i: x7 ?5 N. c$ W
编辑:这是sql小提琴:http ://sqlfiddle.com/#!
0 y- |$ G7 O; _3/20128/1/0
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则