很抱歉,在标题中无法描述上下文。 我的情况是有3张桌子
T1
A|B
1|xyz
2|www
3|abc
4|ppp
5|iuy
T2
A|C
1|1
1|2
2|3
2|4
3|5
4|6
5|7
5|8
T3
C| D |E
1|dfg|NULL
2|jhg|1
3|bnm|NULL
4|lpo|NULL
5|tyu|NULL
6|qrt|2
7|bet|3
8|dsf|4
查询的目的是在t2的条件下显示B及其对应的D.A的E值中至少应有1个对应的C值不为NULL
当在整个图片中通过将另一个使A成为合法结果的非空C匹配A的条件来匹配A的条件时,我很难显示实际上带有N的C。
在上述条件下,期望的A应该为1、4、5,并希望根据t2中与C的关系来显示与期望A的所有D对应的B。
不希望A2和A3,因为它们对应的C的E都为空,而我想拥有的是至少E中的一个包含一个值。
所需的输出应该是
B | D
xyz|dfg
xyz|jhg
ppp|qrt
iuy|bet
iuy|dsf
我希望有人能理解。
答案 0 :(得分:0)
我发现这个问题有点难以理解,但是如果我理解正确,那么您就需要某种exists
子句:
select t2.b, t3.d
from t1 join
t2
on t1.a = t2.a join
t3
on t3.c = t2.c
where exists (select 1
from t2 tt2 join
t3 tt3
on tt2.c = tt3.c
where t2.a = t1.a and t3.e is not null
);
答案 1 :(得分:0)
请问您可以尝试以下查询吗:
select T1.B, T3.D from T1 inner join T2 on
T1.A =T2.A
inner join T3 on T2.C = T3.C
此查询根据上面显示的输出。 但是如果您将E不为NULL 您必须添加到查询中:
and T3.E is not NULL
希望这可以帮助您。
答案 2 :(得分:0)
SELECT B, D
FROM t2
JOIN t1 ON t1.A = t2.A
JOIN t3 ON t3.C = t2.C
WHERE t2.A IN(SELECT A
FROM t2 JOIN t3 ON t3.C = t2.C
GROUP BY A
HAVING COUNT(E) >= 1)
或将其用作COUNT(E) >=1
或COUNT(E) >0
SUM(CASE WHEN registration_number IS NOT NULL THEN 1 ELSE 0 END) > 0)
这对我有用
但是,谁能解释COUNT(E) >=1
或COUNT(E) >0
的表达方式是否更好,以及哪种方式(计数与总和布尔值)更有效?