(
CfgID VARCHAR(10) NOT NULL, --源表的数据类型
CfgName varchar(20) NULL, --名
PriorityStrategyID VARCHAR(20) NULL, --优先策略
DateStrategyID VARCHAR(20) NULL, --
TimesOrIntervalStrategyID VARCHAR(20) NULL, --
CONSTRAINT pk_tb_UsefulStrategyCfg PRIMARY KEY( CfgID )
)这是表结构。我要在一个DBGrid里通过一个ADOquery把这个表显示出来。这个Query的SQL语句要怎么写呢?因为后面三个ID是要从另外三个不同的表中查询后把它们的Name显示出来的,不是直接显示这个ID。我是新手,一下子想不到了,急着要用,谢谢大家。多谢。
CfgID VARCHAR(10) NOT NULL, --源表的数据类型
CfgName varchar(20) NULL, --名
PriorityStrategyID VARCHAR(20) NULL, --优先策略
DateStrategyID VARCHAR(20) NULL, --
TimesOrIntervalStrategyID VARCHAR(20) NULL, --
CONSTRAINT pk_tb_UsefulStrategyCfg PRIMARY KEY( CfgID )
)这是表结构。我要在一个DBGrid里通过一个ADOquery把这个表显示出来。这个Query的SQL语句要怎么写呢?因为后面三个ID是要从另外三个不同的表中查询后把它们的Name显示出来的,不是直接显示这个ID。我是新手,一下子想不到了,急着要用,谢谢大家。多谢。
begin
close;
sql.clear;
sql.add('select * from 表');
open;
end;
DataModule3.TempQuery.SQL.Add('select distinct ID, Descript from tb_TimeStrategy');
DataModule3.TempQuery.Open;顺便提一下,为什么你们写的语句都是with...do这样写的,有什么好处吗?
1、减少内存寻址次数
2、程序条理性
begin
Close;
SQL.Clear;
SQL.Text :='selecet A.CfgID,A.CfgName,B.PriorityStrategyID_Name as NameA,
C.DateStrategyID_Name as NameB,D.TimesOrIntervalStrategyID as NameC
from Cfg_Table as A,Table_B as B, Table_C as C,Table_D as D
Where A.PriorityStrategyID=B.PriorityStrategyID and
A.DateStrategyID=C.DateStrategyID AND
A.TimesOrIntervalStrategyID=D.TimesOrIntervalStrategyID ';
Prepared:=True;
Try
Open;
Except
MessageBox(0,'The AdoQuery DateSet Error. ','ERROR',MB_ICONERROR);
end;
end;其中字段的对应关系我想你应当看的懂吧。
FROM c_ry AS a
JOIN d_xb AS b
ON (a.xb = b.dm)举个例子,上面的我不改了,你自己看的明白吧
biao1 a left join biao2 b on a.id2.b.id2
left join biao3 c on a.id3=c.id3
其中biao1为你上面那个表,biao2,biao3为另两个表,用 a, b,c 来表示方便
selecet A.cfgID as name1, A.CfgName as name2, B.IDDescript as name3, C.IDDescript as name4, D.IDDescript as name from tb_UsefulStrategyCfg A
left join tb_PriorityStrategy B on A.PriorityStrategyID=B.ID
left join tb_DateStrategy C on A.DateStrategyID=C.ID
left join tb_TimesOrIntervalStrategy D on A.TimesOrIntervalStrategyID=D.ID