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)
谢谢!
怎么用不同的方式去做呢?使用子查询的简单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标准,因此非常高效.