Sql 嵌套查询-选择表的第一项并将其与其他表的内容进行比较
我正在使用Teradata并尝试使用嵌套查询 我的查询看起来像这样:Sql 嵌套查询-选择表的第一项并将其与其他表的内容进行比较,sql,nested,teradata,Sql,Nested,Teradata,我正在使用Teradata并尝试使用嵌套查询 我的查询看起来像这样: create table test as select id, selected_value, * from database.table as data left join (select id, value, value_search from database2.table2 where value = 1) as data2 on
create table test as
select id, selected_value, *
from database.table as data
left join (select id, value, value_search
from database2.table2
where value = 1) as data2 on data.id = data2.id
where selected_value >= first_value_search_of_data2 /*i want to select everything that is greater or equal to the first item of data2 in column value_search*/
;
这可能吗?我不明白为什么您需要一个子查询来进行连接,我有一个直接连接和一个子查询来查找第一行。我不确定是什么定义了第一行,所以在这里我使用了MAX,因为示例代码中有>=
select id, selected_value, *
from database.table as data
left join database2.table2 as data2 on data.id = data2.id and data2.value = 1
where selected_value >= (SELECT MAX(value_search) FROM database2.table2)
或者,最后一个子查询可能基于ORDER BY,而不是查找第一行。答案取决于“按第一个值定义的内容”。-但让我们试试:
SELECT ID, SELECTED_VALUE
FROM DATABASE.TABLE AS DATA2
LEFT JOIN (
SELECT ID, VALUE, VALUE_SEARCH
FROM DATABASE2.TABLE2
WHERE VALUE = 1
QUALIFY ROW_NUMBER() OVER (PARTITION by ID, VALUE ORDER BY VALUE_SEARCH DESC) = 1
) AS DATA2
ON DATA.ID = DATA2.ID
WHERE SELECTED_VALUE >= VALUE_SEARCH;
您可以在行号定义中定义第一个值的定义
最后一件事:如果不定义PrimaryIndex DistributionKey,Teradata总是占据第一行。这可能会得到一个不需要的PI,因此是一个高度倾斜的表。因此,我建议始终添加主键定义,即使在没有主索引的情况下
PS:由于预期的执行计划,我认为需要子查询。首先连接两个大表,然后进行过滤是没有意义的。如果将表与预筛选的较小子表连接起来,则Spool和RDBMS会更方便。表的第一项是什么,Where条件意味着值=1?是否要将每个ID与第一项进行比较。能否显示一些示例数据和预期结果?示例数据和预期结果将非常有用。