如何通过单查询实现优先取非空VAC_ID并关联查询VAC_TRV?
整合多步骤SQL查询为单条语句
表结构预览



现有三张表:VAC_NRD、VAC_DOC、VAC_TRV。当前查询逻辑为:
- 先执行
SELECT VAC_ID FROM VAC_NRD WHERE VAC_NRD =?获取VAC_ID - 若上述查询无结果,则执行
SELECT VAC_ID FROM VAC_DOC WHERE VAC_DOC =?获取VAC_ID - 最后用得到的VAC_ID查询
SELECT * FROM VAC_TRV WHERE VAC_ID = ?得到最终结果
可以通过COALESCE函数结合子查询实现单条SQL语句,该函数会返回第一个非空的子查询结果,完美匹配你要的优先级逻辑:
SELECT * FROM VAC_TRV WHERE VAC_ID = COALESCE( -- 优先从VAC_NRD取VAC_ID (SELECT VAC_ID FROM VAC_NRD WHERE VAC_NRD = ? LIMIT 1), -- 若VAC_NRD无结果,则从VAC_DOC取 (SELECT VAC_ID FROM VAC_DOC WHERE VAC_DOC = ? LIMIT 1) );
注:
LIMIT 1用于确保子查询只返回单个结果(避免多值匹配报错),不同数据库语法略有差异:SQL Server用TOP 1,Oracle用FETCH FIRST 1 ROW ONLY,根据你使用的数据库调整即可。
内容的提问来源于stack exchange,提问作者user630209
相关产品推荐
相关产品推荐

