MySQL:使用多个联接获取非空值

时间:2018-10-06 04:37:47

标签: mysql join left-join inner-join outer-join

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

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 * FROM ACT_TABLE2 where TOP_INST_ID = '23266005612';

在此情况下,select query可能会从上述查询返回null value。在这种情况下,我抓紧第二个最高的Instance_ID并按如下所示运行相同的选择查询

SELECT * FROM ACT_TABLE2 where TOP_INST_ID = '23265245712';

上述查询的输出仅返回如下一行

ID          NEXT_ID     TOP_INSTANCE_ID
232660056   232660056   232652457

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

   SELECT * FROM ACT_TABLE3 where NEXT_ID = '232660056';

上述查询的输出仅返回如下一行

ID          EXEP_ID     NEXT_ID
232660072   232660139   232660056

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

   SELECT field2 FROM ACT_TABLE4 where ID = '232660139';

上述查询的输出返回field2,这是我的最终结果

换句话说,我想在我的node='5bbcdded'中传递first table,以便可以从我的field2中获取fourth table的值

1 个答案:

答案 0 :(得分:1)

  • 您可以使用它们之间的关系在所有表之间进行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