多表查询的问题(100分)

  • 主题发起人 主题发起人 ucgypm1
  • 开始时间 开始时间
U

ucgypm1

Unregistered / Unconfirmed
GUEST, unregistred user!
我有三个表
a.dbf
号码 I J K
1 1 1 1
1 2 1 1
2 3 1 1

b.dbf
I J K 含酸
1 1 1 0.1
2 1 1 0.2

c.dbf
I J K 含碱
1 1 1 0.3
2 1 1 0.4
我想 查询三个表中 I,J,K 字段分别相等时 的 号码 ,含酸,含碱的值
查询结果是这样的一个表~~
号码 I J K 含酸 含碱
1 1 1 1 0.1 0.3
1 2 1 1 0.2 0.4
我的表是用ado连接的
如何写sql语句
 
最后要把结果显示到stringgrid中(按号码排序)
 
这个不难的,用INNER JOIN 就很容易实现的
select a.号码,a.I,a.J,a.K,b.含酸,c.含碱 from a inner join b on b.I=a.I and b.J=a.J AND b.K=a.K inner join C
ON C.I=a.I AND c.J=a.J AND c.K=a.K
ORDER BY A.号码
 
这里提供2种方法:
1.表的关联
2.创建临时表
因为你的表比较少,建议用表的关联(你用的是visualfoxpro的数据库吧)
with query1 do
begin
close;
sql.clear;
sql('select a.号码,a.I,a.J,a.K,b.含酸,c.含碱');
Sql('from a inner join b on b.I=a.I and b.J=a.J AND b.K=a.K inner join C
ON C.I=a.I AND c.J=a.J AND c.K=a.K');
sql('where(a.I:=q) and (a.j:=q) and....(后面的你自己完成吧.用一个动态参数传直,找如数据相匹配的字段)
'
 
select a.*, b.含酸, c.含碱
From a inner join b on a.i = b.i and a.j = b.j and a.k = b.k
left join c on a.i = c.i and a.j = c.j and a.k = c.k
 
deardai 的方法就是正确的
 
多人接受答案了。
 
后退
顶部