sql条件子查询 - 如果返回null则忽略子查询?

LFu*_*ess 0 sql sql-server

我有一个连接子查询的查询.如果子查询返回null,我希望它被忽略,我希望查询的其余部分正常工作.

目前我有类似的东西:

SELECT a, b, c, d
FROM tblOne
JOIN tblTwo ON tblOne.a = tblTwo.a --this works fine
JOIN
    (SELECT a
    FROM tblThree) ON tblThree.a = tblOne.a
Run Code Online (Sandbox Code Playgroud)

问题是如果tblThree.a为null,则整个查询返回null.所以,如果tblThree.a不为null,我只想使用子查询.

我可以用CASE或COALESCE或其他方式做些什么吗?请给出代码示例.

lc.*_*lc. 5

使用LEFT OUTER JOIN而不是INNER JOIN.这将返回查询其余部分的所有行,即使没有tblThree返回匹配的行也是如此.在这种情况下,列tblThree将全部NULL.

使用您的查询(虽然我已为派生表添加了必需的别名):

SELECT a, b, c, d
FROM tblOne
INNER JOIN tblTwo ON tblOne.a = tblTwo.a
LEFT OUTER JOIN
(
    SELECT a, e, f
    FROM tblThree
) tblThree ON tblThree.a = tblOne.a
Run Code Online (Sandbox Code Playgroud)

请注意,正如@ 491243所指出的,派生表子查询在这里并没有多大意义.您也很可能a在SELECT子句中有一个不明确的列.我猜这只是你真实查询的推断.