(
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。我是新手,一下子想不到了,急着要用,谢谢大家。多谢。

解决方案 »

  1.   

    with Adoquery1 do
          begin
             close;
             sql.clear;
             sql.add('select * from 表');
             open;
          end;
      

  2.   

    后面三个ID是要从另外三个不同的表中查询后把它们的Name显示出来的,不是直接显示这个ID。楼上说的我已经会了,要不也不敢领这一个月的工资。谢谢。
      

  3.   

    DataModule3.TempQuery.SQL.Clear;
      DataModule3.TempQuery.SQL.Add('select distinct ID, Descript from tb_TimeStrategy');
      DataModule3.TempQuery.Open;顺便提一下,为什么你们写的语句都是with...do这样写的,有什么好处吗?
      

  4.   

    with do 用来指定一个块中的字段的记录、对象、属性。这样写看得有条理些。
      

  5.   

    SQL语句用LEFT JOIN 做一下连接
      

  6.   

    with do:
    1、减少内存寻址次数
    2、程序条理性
      

  7.   

    谢谢楼上。我看看有没有朋友说得更详细些。没有的话我再查Left Join的用法。
      

  8.   

    with AdoQuery do
    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;其中字段的对应关系我想你应当看的懂吧。
      

  9.   

    SELECT a.bh as 编号 ,b.mc as 性别
    FROM c_ry AS a
         JOIN d_xb AS b
         ON (a.xb = b.dm)举个例子,上面的我不改了,你自己看的明白吧
      

  10.   

    select a.id1,b.id2,b.name2,c.id2,c.name2 from 
    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 来表示方便
      

  11.   

    上面有个错误,应该是a.id2=b.id2 把=号打成点了。
      

  12.   

    left join就OK了,要想拿接下来几个月的工资要多努力了
      

  13.   

    selecet A.cfgID as name1, A.CfgName as name2, B.IDDescript as name3, C.IDDescript as name4, D.IDDescript as name from tb_UsefulStrategyCfg as A left join tb_PriorityStrategy as B on  A.PriorityStrategyID=B.ID left join tb_DateStrategy as C on A.DateStrategyID=C.ID left join tb_TimesOrIntervalStrategy as D on A.TimesOrIntervalStrategyID=D.ID 还不行啊,Incorrect syntax near '.'. 我那里看得出是near哪个.啊。惨了,惨了。
      

  14.   

    照着上面 黑鹰船长 的写也是同样的错误。,Incorrect syntax near '.'.
      

  15.   

    把as去掉看看,是否写出了错别字.
       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 
      

  16.   

    SQL出来了,结果就出来了。用关联的SQL就可以了。
      

  17.   

    结账后才发现黑鹰船长的这个语句是无法实现的。看来还得Left Join.
      

  18.   

    原来Left Join 的效果和船长的语句是一样的,是我搞错了。要加上distinct 才行。还有其它方法吗?