Sql 嵌套查询-选择表的第一项并将其与其他表的内容进行比较

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

我正在使用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 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与第一项进行比较。能否显示一些示例数据和预期结果?示例数据和预期结果将非常有用。