我在生成执行以下操作的查询时遇到问题
If query1 returns 0 rows
then return results of query2
else
return nothing
字符串
联合和联合不是答案
第一个查询看起来像这样:
SELECT aa.id from A aa JOIN B bb on aa.id=bb.pid where bb.pid = 10 and aa.sid IS NOT NULL
型
第二个查询看起来像这样:
SELECT aa.id from A aa JOIN B bb on aa.id=bb.pid where bb.pid = 10 and aa.sid IS NULL
型
我已经可以运行第二个查询并返回sid列,然后检查它是否存在于结果中,但我希望弄清楚如何将其作为单个查询来执行。
2条答案
按热度按时间fdx2calv1#
主要思想是过滤NOT EXISTS query 1-result,类似于:
字符串
对你来说就是:
型
mwyxok5s2#
不要使用两个查询,在一个查询中完成所有查询。
在Oracle 12中,您可以使用
ORDER BY
首先对非NULL
行进行排序,然后是NULL
行,然后是FETCH FIRST ROW WITH TIES
以获取所有非NULL
的行,然后如果它们不存在,则是NULL
行,然后您可以使用内联视图进行过滤,以仅显示NULL
sid
行:字符串
如果您使用的是Oracle 11或更早版本,则可以使用
RANK
分析函数:型
或者使用解析函数
COUNT
来计算非NULL
sid
值的数量:型
或者你可以使用
NOT EXISTS
(尽管这将比前面的查询效率低,因为它将从表中读取两次,而前面的查询只从表中读取一次):型
fiddle