mysql:使用多个连接获取非空值

kmynzznz  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(334)

我正在运行一些查询,我想使用连接将其转换为单个查询我的第一个查询是

1)  SELECT * FROM ACT_TABLE1 where  node='5bbcdded' order by Instance_ID desc;

上述查询的输出如下

ID          Instance_ID NODE
2326600581  23266005612 5bbcdded1
2326524592  23265245712 5bbcdded2
2326523503  23265234213 5bbcdded3
2326523004  23265229614 5bbcdded4

2) 现在,我抓住最上面的 Instance_ID 并运行另一个select查询,如下所示

SELECT * FROM ACT_TABLE2 where TOP_INST_ID = '23266005612';

在这里,可能有一种情况 select query 返回一个 null value 从上面的查询。那样的话,我就拿第二个最上面的 Instance_ID 并运行相同的select查询,如下所示

SELECT * FROM ACT_TABLE2 where TOP_INST_ID = '23265245712';

上述查询的输出只返回一行,如下所示

ID          NEXT_ID     TOP_INSTANCE_ID
232660056   232660056   232652457

3) 现在,我抓住最上面的 NEXT_ID 并运行另一个select查询,如下所示

SELECT * FROM ACT_TABLE3 where NEXT_ID = '232660056';

上述查询的输出只返回一行,如下所示

ID          EXEP_ID     NEXT_ID
232660072   232660139   232660056

4) 现在,我抓住最上面的 EXEP_ID 并运行另一个select查询,如下所示

SELECT field2 FROM ACT_TABLE4 where ID = '232660139';

上述查询的输出返回 field2 这是我的最终结果
换句话说,我想通过考试 node='5bbcdded' 在我的 first table 这样我就能得到 field2 从我的 fourth table

nbewdwxp

nbewdwxp1#

你能做到的 Inner Join 在所有表之间,使用它们的关系。
然后,采用多级 Order By 从第一个表开始的子句(全部按降序排列,因为您希望从所有表中的最上面开始)。我们使用 LIMIT 1 以获取排序后的第一行,这将是最上面的。 Inner Join 将确保任何不匹配的行( null 将忽略。
尝试:

SELECT t4.field2 
FROM ACT_TABLE1 AS t1 
INNER JOIN ACT_TABLE2 AS t2 ON t2.TOP_INST_ID = t1.Instance_ID
INNER JOIN ACT_TABLE3 AS t3 ON t3.NEXT_ID = t2.NEXT_ID 
INNER JOIN ACT_TABLE4 AS t4 ON t4.ID = t3.EXEP_ID 
where t1.node = '5bbcdded'
ORDER BY t1.Instance_ID DESC, t2.NEXT_ID DESC, t3.EXEP_ID DESC 
LIMIT 1

相关问题