以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]SQLtable的嵌套用法  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=24282)

--  作者:chnfo
--  发布时间:2012/10/9 17:04:00
--  [求助]SQLtable的嵌套用法
在窗口中建立一个SQLTable的表table1。
有一个全局代码变量KID为数值型。
这个表里的数据来源于表A,而且要满足条件表A的_Identify列在B表的“表AID“列中有。

Tables(e.Form.Name & "_Table1").Fill("Select * from {表A}  where [_Identify]  In (Select 表AID from {表B} where [KK] = & KID)", "外部数据源名", True)

问题:
(1)这样的用法提示SQL语句执行错误,请检查语法及数据源设置,是不是Select 表AID from {表B} where [KK] = & KID也要注明外部数据源名?
(2)如果用这样的做法来实现,效率上会不会很低?其实,我用了一个变通的办法来解决它,但觉得一开始加载table的时候,如果数据量很大,后面再过滤一次,可能还不如第一次加载时就过滤到位。
[此贴子已经被作者于2012-10-9 17:08:01编辑过]

--  作者:blackzhu
--  发布时间:2012/10/9 17:07:00
--  
你用查询器套个SQL语句出来不就行了?
--  作者:lin_hailun
--  发布时间:2012/10/9 17:13:00
--  
 SQL语句可以随便嵌套。

 语句错了这个地方 where [KK] = & KID

 子查询如果可以,最好改成连接查询。

--  作者:chnfo
--  发布时间:2012/10/9 17:14:00
--  
你是说用SQLJoinTableBuilder?
--  作者:lin_hailun
--  发布时间:2012/10/9 17:50:00
--  
以下是引用chnfo在2012-10-9 17:14:00的发言:
你是说用SQLJoinTableBuilder?

差不多,不过指的是写sql语句。

比如你上面那句可以变成 Select {表A}.* from {表A} join {表B} on ({表A}._Ientify = {表B}.表AID) where ......
[此贴子已经被作者于2012-10-9 17:49:45编辑过]

--  作者:chnfo
--  发布时间:2012/10/9 23:28:00
--  
试了几遍,还是不太明白错在哪里。
--  作者:chnfo
--  发布时间:2012/10/9 23:54:00
--  
明白了。

Tables(e.Form.Name & "_Table1").Fill("Select * from {表A}  where [_Identify]  In (Select 表AID from {表B} where [KK] = & KID)", "外部数据源名", True)

应当改为
Tables(e.Form.Name & "_Table1").Fill("Select * from {表A}  where [_Identify]  In (Select 表AID from {表B} where [KK] =  " & KID & ")", "外部数据源名", True)
[此贴子已经被作者于2012-10-10 6:49:07编辑过]