在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;
谢谢!
如何以不同的方式去做呢?一个简单的带有子查询的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;
这只会返回恰好具有1个X实例的项目,并在适当时将LEFT OUTER JOIN JOIN返回表中(不匹配为NULL)。
这也是ANSI兼容的,因此性能非常好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句