我在teid vdb table a和table b中有两个表,对于表a中的每一行,表b可以包含一行或多行,如何连接这两个表,以便表a中的每一条记录都有一个表b的匹配项?如果表b包含多个行,则join应给出任意一行。
目前我正在写它,但性能是缓慢的
select
(select e from b where b.source_file_name = a.source_file_name limit 1) e,
(select f from b where b.source_file_name = a.source_file_name limit 1) f,
(select g from b where b.source_file_name = a.source_file_name limit 1) g,
(select h from b where b.source_file_name = a.source_file_name limit 1) h,
a.*
from a where a.source_file_name = 'test'
1条答案
按热度按时间mec1mxoz1#
如果总是提供a.source\u file\u name predicate ,那么假设整个查询没有从所显示的内容向下推,那么teid应该进行优化,以便在最坏的情况下,有1个外部查询,然后有4个额外的查询用于b表信息。您是否看到了更多内容和/或运行查询时未指定.source文件名?
最简单的解决方案是使用横向连接:
从侧面选择a.,b.(从b选择e,f,g,h,其中b.source\u file\u name=a.source\u file\u name limit 1)b其中a.source\u file\u name='test'
有效地说,对于从一个执行连接的每一行。