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

7eumitmz  于 2021-06-19  发布在  Mysql
关注(0)|答案(3)|浏览(232)

很抱歉在描述标题中的上下文时遇到困难。我的情况是有三张table
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应至少有1个对应的c值,以使其e值不为null
我很难用null表示一个c,而实际上,当a的条件通过组成另一个非null的c来匹配整个图时,它应该被包括进来,从而得到一个合法的结果。
在上述条件下,期望的a应该是1、4、5,并且希望显示其对应的b和t2中与c的关系中期望a的所有d。
a2和a3是不需要的,因为它们对应的e和c都是空的,我想要的是至少有1个e包含一个值。
想要的输出应该是

B | D
xyz|dfg
xyz|jhg
ppp|qrt
iuy|bet
iuy|dsf

我希望有人能理解。

pgpifvop

pgpifvop1#

你能试试这个查询吗

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

希望这能对ypu有所帮助。

wgx48brx

wgx48brx2#

我觉得这个问题有点难理解,但如果我理解正确的话,你想问一些问题 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
             );
tct7dpnv

tct7dpnv3#

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` 对于表达式更好,哪种方法(计数与求和布尔值)更有效?

相关问题