问题描述
大家好,
我在和一个观点作斗争。视图的结果可以是具有相同字段的3个不同视图中的1行。
有人可以指出正确的方向,请如何思考?:)
非常基本,这是我的问题:
我不需要完整的代码,只是正确方向的提示;)。
提前谢谢。
我在和一个观点作斗争。视图的结果可以是具有相同字段的3个不同视图中的1行。
有人可以指出正确的方向,请如何思考?:)
非常基本,这是我的问题:
/* MAINVIEW */ SELECT * FROM (SELECT * FROM VIEW1) --returns n rows /* IF VIEW1 IS EMPTY THEN SELECT ALL FROM VIEW2 */ (SELECT * FROM VIEW2) -- returns n rows /* IF VIEW2 IS EMPTY THEN SELECT VIEW3 (=HAS ALWAYS DATA) */ (SELECT * FROM VIEW3) -- returns 1 row
我不需要完整的代码,只是正确方向的提示;)。
提前谢谢。
专家解答
这样的东西可能会工作:
虽然它导致运行view1查询三次和view2查询两次,所以可能会很慢。
接受这些视图的基础查询并将不存在检查写入这些视图可能会更快。或者可能有更好的方法,没有示例表和数据很难说。
select * from view1 union all select * from view2 where not exists ( select * from view1 ) union all select * from view3 where not exists ( select * from view1 ) and not exists ( select * from view2 )
虽然它导致运行view1查询三次和view2查询两次,所以可能会很慢。
接受这些视图的基础查询并将不存在检查写入这些视图可能会更快。或者可能有更好的方法,没有示例表和数据很难说。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




