MySQL:使用多个连接获取非空值
MySQL: Fetching non-null values using multiple joins
我正在 运行 宁一些查询,我想使用连接将其转换为单个查询
我的第一个查询是
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
returns a null value
from above query 的情况。在那种情况下,我抓取第二个最高 Instance_ID
和 运行 相同的 select 查询如下
SELECT * FROM ACT_TABLE2 where TOP_INST_ID = '23265245712';
上面查询的输出returns只有一行如下
ID NEXT_ID TOP_INSTANCE_ID
232660056 232660056 232652457
3) 现在,我抓取最上面的 NEXT_ID
和 运行 另一个 select 查询如下
SELECT * FROM ACT_TABLE3 where NEXT_ID = '232660056';
上面查询的输出returns只有一行如下
ID EXEP_ID NEXT_ID
232660072 232660139 232660056
4) 现在,我抓取最上面的 EXEP_ID
和 运行 另一个 select 查询如下
SELECT field2 FROM ACT_TABLE4 where ID = '232660139';
上面查询的输出returnsfield2
这是我的最终结果
换句话说,我想在我的 first table
中传递 node='5bbcdded'
以便我可以从我的 fourth table
中获取 field2
的值
- 您可以在所有 table 之间执行
Inner Join
,使用它们之间的关系。
- 然后,从第一个 table 开始使用多个级别的
Order By
子句(全部按降序排列,因为您想要所有 table 中的最顶层)。我们使用 LIMIT 1
得到排序后的第一行,这将是最上面的。
Inner Join
将确保忽略任何不匹配的行(下一个 table 中的 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
我正在 运行 宁一些查询,我想使用连接将其转换为单个查询 我的第一个查询是
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
returns a null value
from above query 的情况。在那种情况下,我抓取第二个最高 Instance_ID
和 运行 相同的 select 查询如下
SELECT * FROM ACT_TABLE2 where TOP_INST_ID = '23265245712';
上面查询的输出returns只有一行如下
ID NEXT_ID TOP_INSTANCE_ID
232660056 232660056 232652457
3) 现在,我抓取最上面的 NEXT_ID
和 运行 另一个 select 查询如下
SELECT * FROM ACT_TABLE3 where NEXT_ID = '232660056';
上面查询的输出returns只有一行如下
ID EXEP_ID NEXT_ID
232660072 232660139 232660056
4) 现在,我抓取最上面的 EXEP_ID
和 运行 另一个 select 查询如下
SELECT field2 FROM ACT_TABLE4 where ID = '232660139';
上面查询的输出returnsfield2
这是我的最终结果
换句话说,我想在我的 first table
中传递 node='5bbcdded'
以便我可以从我的 fourth table
field2
的值
- 您可以在所有 table 之间执行
Inner Join
,使用它们之间的关系。 - 然后,从第一个 table 开始使用多个级别的
Order By
子句(全部按降序排列,因为您想要所有 table 中的最顶层)。我们使用LIMIT 1
得到排序后的第一行,这将是最上面的。 Inner Join
将确保忽略任何不匹配的行(下一个 table 中的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