显示来自其他2个表的相交表的相应数据

时间:2018-11-17 13:04:06

标签: mysql sql

很抱歉,在标题中无法描述上下文。 我的情况是有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

我希望有人能理解。

3 个答案:

答案 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) >=1COUNT(E) >0

的替代方法
SUM(CASE WHEN registration_number IS NOT NULL THEN 1 ELSE 0 END) > 0)

这对我有用

但是,谁能解释COUNT(E) >=1COUNT(E) >0的表达方式是否更好,以及哪种方式(计数与总和布尔值)更有效?