SQL在select子查询中只返回一行或null

Bum*_*per 2 sql oracle subquery

在Oracle中,是否可以在select语句中有一个子查询,如果子查询返回一行,则返回一个列,如果子查询没有返回多行,则返回null?

例:

SELECT X,
  Y,
  Z,
  (SELECT W FROM TABLE2 WHERE X = TABLE1.X) /* but return null if 0 or more than 1 rows is returned */
FROM TABLE1;
Run Code Online (Sandbox Code Playgroud)

谢谢!

Pla*_*dea 5

怎么用不同的方式去做呢?使用子查询的简单LEFT OUTER JOIN应该可以执行您想要的操作:

SELECT T1.X
 ,T1.Y
 ,T1.Z
 ,T2.W
FROM TABLE1 AS T1
LEFT OUTER JOIN (
    SELECT X
      ,W
    FROM TABLE2
    GROUP BY X,W
    HAVING COUNT(X) = 1
) AS T2 ON T2.X = T1.X;
Run Code Online (Sandbox Code Playgroud)

这将仅返回具有正好1个X实例的项目,并且在适当时将LEFT OUTER JOIN返回到表中(使非匹配为NULL).

这也符合ANSI标准,因此非常高效.