Mar*_*tin 5 sql db2 sql-execution-plan
我遇到了一个问题,我需要运行一个Query,它应该从主表中获取一些行,并且如果主表的键存在于子表(关系一对多)中,则有一个指示符.
查询可能是这样的:
select a.index, (select count(1) from second_table b where a.index = b.index)
from first_table a;
Run Code Online (Sandbox Code Playgroud)
这样我就可以得到我想要的结果(0 =在second_table中没有依赖记录,否则有),但我正在为从数据库中获取的每条记录运行一个子查询.我需要为至少三个类似的表得到这样一个指标,主要查询已经是至少两个表之间的一些内部联接......
我的问题是,是否有一些非常有效的方法来处理这个问题.我曾想过将记录保存在新列"first_table"中,但dbadmin不允许触发器并通过代码跟踪它是太冒险了.
解决这个问题的好方法是什么?
此查询的应用程序将用于两件事:
我刚发现的另一个选择:
select a.index, b.index
from first_table a
left join (select distinct(index) as index from second_table) b on a.index = b.index
Run Code Online (Sandbox Code Playgroud)
这样,如果b.index不存在,我将得到null(显示最终可以调整,我在这里关注查询性能).
这个问题的最终目标是为这种情况找到合适的设计方法.它经常发生,真正的应用程序是一个POS系统,以显示所有客户端,并在列表中有一个图标作为指示客户端已打开订单.
我想,尝试使用EXISTS,对于这种情况,加入表可能会更好.在我的oracle db上,它提供了比示例查询更好的执行时间,但这可能是特定于db的.
SELECT first_table.ID, CASE WHEN EXISTS (SELECT * FROM second_table WHERE first_table.ID = second_table.ID) THEN 1 ELSE 0 END FROM first_table
Run Code Online (Sandbox Code Playgroud)