设想:
第一次对数据表查询计算出结果后,利用该结果进行第二次计算查询。方法:
第一次查询计算:
DBGrid1->DataSource1->Query1->DatabaseName1。(DatabaseName中含有可操作的paradox数据表dbTable1)
点击button1处理程序:
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Text:='select field1*5 as totalnum from dbTable1.db ';
Query1.Open;
运行后,可以在DBGrid1显示出字段名为‘totalnum’的表。达到目的;第二次,
DBGrid2->DataSource2->Query2->DataSource1 (希望能利用第一次的查询计算结果进行第二次计算)
点击button2处理程序:
Query2.Close;
Query2.SQL.Clear;
Query2.SQL.Text:='select totalnum+10 as incnum from dbTable1.db ';
Query2.Open;
但是运行时,给出出错信息:invalid field name totalnum。
请问如何才能够利用一个查询结果进行查询?
第一次对数据表查询计算出结果后,利用该结果进行第二次计算查询。方法:
第一次查询计算:
DBGrid1->DataSource1->Query1->DatabaseName1。(DatabaseName中含有可操作的paradox数据表dbTable1)
点击button1处理程序:
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Text:='select field1*5 as totalnum from dbTable1.db ';
Query1.Open;
运行后,可以在DBGrid1显示出字段名为‘totalnum’的表。达到目的;第二次,
DBGrid2->DataSource2->Query2->DataSource1 (希望能利用第一次的查询计算结果进行第二次计算)
点击button2处理程序:
Query2.Close;
Query2.SQL.Clear;
Query2.SQL.Text:='select totalnum+10 as incnum from dbTable1.db ';
Query2.Open;
但是运行时,给出出错信息:invalid field name totalnum。
请问如何才能够利用一个查询结果进行查询?
Select * From ( 第一次查询的SQL语句 )
Select * From ( 第一次查询的SQL语句 )
子查询基础知识
子查询是一个 SELECT 查询,它返回单个值且嵌套在 SELECT、INSERT、UPDATE、DELETE 语句或其它子查询中。任何允许使用表达式的地方都可以使用子查询。下例中,一个子查询用作 SELECT 语句中名为 MaxUnitPrice 的列表达式。子查询也称为内部查询或内部选择,而包含子查询的语句也称为外部查询或外部选择。许多包含子查询的 Transact-SQL 语句都可以改为用联接表示。而其它一些问题只能由子查询提出。在 Transact-SQL 中,包括子查询的语句和不包括子查询但语义上等效的语句在性能方面通常没有区别。但是,在一些必须检查存在性的情况中,使用联接会产生更好的性能。否则,为确保消除重复值,必须为外部查询的每个结果都处理嵌套查询。所以在这些情况下,联接方式会产生更好的效果。下面的示例显示返回相同结果集的 SELECT 子查询和SELECT 联接:子查询的 SELECT 查询总是使用圆括号括起来。且不能包括 COMPUTE 或 FOR BROWSE 子句,如果同时指定 TOP 子句,则可能只包括 ORDER BY 子句。子查询可以嵌套在外部 SELECT、INSERT、UPDATE 或 DELETE 语句的 WHERE 或 HAVING 子句内,或者其它子查询中。尽管根据可用内存和查询中其它表达式的复杂程度不同,嵌套限制也有所不同,但嵌套到 32 层是可能的。个别查询可能会不支持 32 层嵌套。任何可以使用表达式的地方都可以使用子查询,只要它返回的是单个值。如果某个表只出现在子查询中而不出现在外部查询中,那么该表中的列就无法包含在输出中(外部查询的选择列表)。包括子查询的语句通常采用以下格式中的一种:
var
FirstSQL:String;
第一次查询计算:
DBGrid1->DataSource1->Query1->DatabaseName1。(DatabaseName中含有可操作的paradox数据表dbTable1)
点击button1处理程序:
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Text:='select field1*5 as totalnum from dbTable1.db ';
//
FirstSQL:=Query1.SQL.text;
Query1.Open;
运行后,可以在DBGrid1显示出字段名为‘totalnum’的表。达到目的;第二次,
DBGrid2->DataSource2->Query2->DataSource1 (希望能利用第一次的查询计算结果进行第二次计算)
点击button2处理程序:
Query2.Close;
Query2.SQL.Clear;
Query2.SQL.Text:='select totalnum+10 as incnum from dbTable1.db '+' where TotalNum in ('+FirstSQL+')';//让第二次的查询结果从第一次结果中取出来!
Query2.Open;
DBGrid2->DataSource2->Query2->DataSource1 (希望能利用第一次的查询计算结果进行第二次计算)
点击button2处理程序:
Query2.Close;
Query2.SQL.Clear;
Query2.SQL.Text:='select totalnum+10 as incnum from '+FirstSQL+')';//让第二次的查询结果从第一次结果中取出来!
Query2.Open;