对不起标题,我会尽力在这里解释
我们有如下表格:
c1 | c2 |c3
____________
111 | 11 | 2
123 | 11 | 3
111 | 44 | 4
156 | 88 | 7
111 | 44 | 8
444 | 44 | 1
123 | 11 | 4
123 | 55 | 4
所以首先我想检查c3,看看在c3列中是否有值为2的行
此处c3=2'
这部分很容易
在那之后,我们取c1的值(来自我们在前一步中得到的行(-它将是111(就像在这一行中,我们在c3中有2(
现在是困难的部分,我们想得到所有的行,如果c2值在c1中至少有一次有111值,我们将在c2 中取所有有该值的行
例如,在第一行中,我们在c1中有111,我们从c2中获取值,并从表中查找c2值=11的所有行(即使c1值不再是111(
我最后想得到的那些行:
c1 | c2 |c3
____________
111 | 11 | 2
123 | 11 | 3
111 | 44 | 4
111 | 44 | 8
444 | 44 | 1
123 | 11 | 4
嗯。有一种方法可以将您的需求几乎直接转化为in
条件:
select t.*
from t
where t.c2 in (select t2.c2
from t t2
where t2.c1 in (select t3.c1 from t t3 where t3.c3 = 2)
);