【问题标题】:MySQL: Fetching non-null values using multiple joinsMySQL:使用多个连接获取非空值
【发布时间】:2019-03-11 13:25:48
【问题描述】:

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

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,这是我的最终结果

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

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2018-08-24
      • 1970-01-01
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多