标题:请教高手:sqlexec()同时查询两个不同库
只看楼主
寻H不得
Rank: 4
等 级:业余侠客
威 望:1
帖 子:181
专家分:222
注 册:2010-10-9
结帖率:100%
已结贴  问题点数:20 回复次数:9 
请教高手:sqlexec()同时查询两个不同库
在VFP中,如果存在表A,表B且两表关联字段为ID (表A是一个包含许多字段的学生表,表B则只有一个字段ID)
可以这样查询
sele * from 表A,表B where 表A.ID=表B.ID

sele * from 表A where 表A.ID NOT in (sele ID from 表B)
这种查询可以一次性从数据库中批量比对出所需要的结果

现在的问题是:
我有同上面一样的需求,我手上有一个ID字段的学生表(表B,VFP格式),需要在表A中查询出相关信息,但表A在MYSQL数据库中,这种情况下当如何设计查询呢?
SQLEXEC(sqlhandle,"select * from 表A,表B where 表A.ID=表B.ID","temp")  &&这样是不行的

到网上搜索没找到类似问题,怎么回事呢?请高手指点!

[ 本帖最后由 寻H不得 于 2012-6-9 09:59 编辑 ]
搜索更多相关主题的帖子: where 如何 
2012-06-09 09:43
taohua300
Rank: 12Rank: 12Rank: 12
来 自:光
等 级:贵宾
威 望:14
帖 子:1636
专家分:3906
注 册:2009-3-11
得分:0 
SQLEXEC(sqlhandle,"select * from 表A,表B where 表A.ID=表B.ID","temp")  &&这样是不行的

sqlhandle 是连接数据库的句柄
执行这个语句的时候肯定是去mysql去查询啊

这种问题应该很好解决啊
先把表A从数据库读取到本地
然后在表A表B联合查询

如果表A过大
那就先把表B的ID字段读取出来,在组合sql语句去mysql查询
类似
select * from 表A where id in (这里是表B组合后的ID字段)

个性太多,无法显示
2012-06-09 10:16
寻H不得
Rank: 4
等 级:业余侠客
威 望:1
帖 子:181
专家分:222
注 册:2010-10-9
得分:0 
回复 2楼 taohua300
你这里的 select * from 表A where id in (这里是表B组合后的ID字段)
括号内的内容怎么构建呢?用sele 子查询?还是用变量?
请指点!
2012-06-09 10:23
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
得分:0 
既然使用MySql数据库,不如把你的vfp表中的数据导入到MySql中,
就可以使用你最熟悉的子查询在同一个数据库中查询A,B表。
跨库,而且还是不同的数据库操作,偶还是第一次看到有人这样做。

我们都在路上。。。。。
2012-06-09 11:53
taohua300
Rank: 12Rank: 12Rank: 12
来 自:光
等 级:贵宾
威 望:14
帖 子:1636
专家分:3906
注 册:2009-3-11
得分:8 

select id from 表b into cursor temp
aa = ''
for i = 1 to recc('temp')
go (i)
aa = aa + transform(temp.id) + ","
next
csql = "select * from 表A where id in (" + aa + ")"
SQLEXEC(sqlhandle,csql,"temp")

个性太多,无法显示
2012-06-09 11:57
taohua300
Rank: 12Rank: 12Rank: 12
来 自:光
等 级:贵宾
威 望:14
帖 子:1636
专家分:3906
注 册:2009-3-11
得分:0 
where 后面的 in 如果不行的行换exist试试

个性太多,无法显示
2012-06-09 11:58
寻H不得
Rank: 4
等 级:业余侠客
威 望:1
帖 子:181
专家分:222
注 册:2010-10-9
得分:0 
回复 4楼 hellovfp
你说的有道理
只是我想的是如果将要查询的数据导入到MySql数据表中,一个人用也许没问题,如果几个人共享的话怎么解决冲突问题,如果有临时数据库也许可以试
在VFP中可以将准备查询的数据装入临时数据表,然后两表并查,这个好操作
但在MYSQL中用SQLEXEC()好像没有创建临时数据表的功能,找了半天,也不知道如何操作


[ 本帖最后由 寻H不得 于 2012-6-10 12:01 编辑 ]
2012-06-10 11:59
寻H不得
Rank: 4
等 级:业余侠客
威 望:1
帖 子:181
专家分:222
注 册:2010-10-9
得分:0 
回复 5楼 taohua300
谢谢 你的方法通过,只是如果我的表中数据较大时会不会出问题,还要再试试
2012-06-10 12:12
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
得分:12 
回复 7楼 寻H不得
汗ing,如果mysql不支持多人访问数据库的话,也不会有那么多的人选择这个数据库了。
打个比方:你知道论坛也是采用的数据库么?如果这个数据库不能支持多人访问的话,我们就没有办法看帖回帖了。
一个事实就是论坛多采用MySQL, MS SQL,ACCESS作为其后台数据库。

http://
mysql 5.1中文参考手册,你可以读读上面的内容。

以下是引自里面的SQL语句语法:-Create TABLE语法一节的内容:

“在创建表格时,您可以使用TEMPORARY关键词。只有在当前连接情况下,TEMPORARY表才是可见的。当连接关闭时,TEMPORARY表被自动取消。这意味着两个不同的连接可以使用相同的临时表名称,同时两个临时表不会互相冲突,也不与原有的同名的非临时表冲突。(原有的表被隐藏,直到临时表被取消时为止。)您必须拥有CREATE TEMPORARY TABLES权限,才能创建临时表。”

我们都在路上。。。。。
2012-06-10 12:44
寻H不得
Rank: 4
等 级:业余侠客
威 望:1
帖 子:181
专家分:222
注 册:2010-10-9
得分:0 
回复 9楼 hellovfp
非常感谢 你说的语句 我反复试过多次也不知道为什么不成功
如下:
AX="CREATE TEMPORARY TABLE tmp_table (name VARCHAR(10) NOT NULL,value INTEGER NOT NULL)"
?SQLEXEC(sqlhandle,AX,"temp0")
?SQLEXEC(sqlhandle,AX)
AX="CREATE TEMPORARY TABLE tmp_table (RT VARCHAR(10),RE VARCHAR(10))"
?SQLEXEC(sqlhandle,AX)
...**以上全部失败


嘿 TNND 就在刚才,下面这句就成功了 我晕死
AX="CREATE TEMPORARY TABLE tmtb (RT VARCHAR(10),RE VARCHAR(10))"
?SQLEXEC(sqlhandle,AX)
终于成功解决 感谢各位

[ 本帖最后由 寻H不得 于 2012-6-10 13:15 编辑 ]
2012-06-10 13:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-371136-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.369615 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved