如果至少在一行中,我们在c1列中有所需的值,则提取c2列中具有相同值的所有行



对不起标题,我会尽力在这里解释

我们有如下表格:

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)
);

最新更新