主题:三个表能连接,再加一个表内外连接都更不行?
YHGDSYH
[专家分:0] 发布于 2006-10-24 15:05:00
SELECT
T_YH_YHTZ.USERCODE,USERNAME,CAPACITY,BOOKCODE,OPENDATE,T_YH_YYTZ.METECODE,T_JL_BJTZ.OFFICODE,MODCODE,MECODE,FACTCODE,MULT,MECURRENT,MECURRENT2
From T_YH_YHTZ
Inner Join T_YH_YYTZ on T_YH_YYTZ.UserCode=T_YH_YHTZ.UserCode
Inner Join T_JL_BJTZ ON T_JL_BJTZ.MECODE=T_YH_YYTZ.METECODE
WHERE T_YH_YHTZ.USERTYPE=2 AND T_YH_YHTZ.BOOKCODE ='#cell(3,1)'
ORDER BY T_YH_YHTZ.BOOKCODE,T_YH_YHTZ.USERCODE
本人需在同一库中的另一表T_JL_BJXH中查询MODNAME,通过该表的MODCODE与以上T_JL_BJTZ中的MODCODE的关系,经外部或内部连接都不行,请高手赐教.(注:'#cell(3,1)'为下拉框数据)
回复列表 (共13个回复)
沙发
liulei001 [专家分:12820] 发布于 2006-10-24 22:07:00
什么数据库?
Access和SQL中,关联数据表的语法不太一样。Access里面不能连续用join
板凳
wdkshp [专家分:5490] 发布于 2006-10-25 09:41:00
字段名称和连接关系都没书写错误的前提下
From T_YH_YHTZ
Inner Join T_YH_YYTZ on T_YH_YYTZ.UserCode=T_YH_YHTZ.UserCode
Inner Join T_JL_BJTZ ON T_JL_BJTZ.MECODE=T_YH_YYTZ.METECODE
更改为
From (T_YH_YHTZ Inner Join T_YH_YYTZ on
T_YH_YYTZ.UserCode=T_YH_YHTZ.UserCode)
Inner Join T_JL_BJTZ ON T_JL_BJTZ.MECODE=T_YH_YYTZ.METECODE
加个括号
where子句中的 T_YH_YHTZ.BOOKCODE ='#cell(3,1)'
更改为
T_YH_YHTZ.BOOKCODE ='" & #cell(3,1) & "'"
如果#cell(3,1)代表的数据不是字符串,则更改为
T_YH_YHTZ.BOOKCODE =" & #cell(3,1)
试一试
3 楼
wdkshp [专家分:5490] 发布于 2006-10-25 09:42:00
[quote]什么数据库?
Access和SQL中,关联数据表的语法不太一样。Access里面不能连续用join[/quote]
access里面能够使用inner join,我用过好多次都能正确运行
4 楼
YHGDSYH [专家分:0] 发布于 2006-10-25 14:29:00
WDKSHP:你好,我所使用的是SQL SERVER 2000库.
5 楼
YHGDSYH [专家分:0] 发布于 2006-10-25 14:42:00
WDKSHP:我提供的SQL语言是正确的,问题是再增加一个查询,也就是在同一库中的另一表中(T_JL_BJXH)通过表中的(T_JL_BJXH)的MODCODE与已查询过T_JL_BJTZK中MODCODE的等量关系建立新的查询,本人增加了Inner Join T_JL_BJXH ON T_JL_BJXH.MODCODE=T_JL_BJTZ.MODCODEE连接,查询时出错.库为SQL SERVER 2000,请指教.
6 楼
wdkshp [专家分:5490] 发布于 2006-10-25 16:15:00
1.首先,SQL语句一般来说与具体的数据库无关,因为一般的关系型数据库都支持标准的SQL语句,偶尔会有个别词有出入,但格式基本上一致
2.关于再增加一个查询,同前面3表查询类似,只不过你别忘了将3表连接的语句部分用()括起来,上次有个网友就是忽略了这个细节而调试时出现错误提示。
From ((T_YH_YHTZ Inner Join T_YH_YYTZ on
T_YH_YYTZ.UserCode=T_YH_YHTZ.UserCode)
Inner Join T_JL_BJTZ ON T_JL_BJTZ.MECODE=T_YH_YYTZ.METECODE)
Inner Join T_JL_BJXH ON T_JL_BJTZ.MODCODE=T_JL_BJXH.MODTECODE
还有个建议,你以后提问时,不要用这么复杂的代号,使用表1、表2……等或者
Table1、Table2来表示,别人容易阅读
7 楼
YHGDSYH [专家分:0] 发布于 2006-10-25 20:05:00
WDKSHP:你好!以下是根据你的提示修正的语句,因仍不行,要查的是最后一个表中的其中一列MODNAME(数字、字母与汉字混合字段),连接关系是MODCODE,请烦再审查和指教!谢谢.
SELECT
T_YH_YHTZ.USERCODE,USERNAME,CAPACITY,BOOKCODE,OPENDATE,T_YH_YYTZ.METECODE,T_JL_BJTZ.OFFICODE,MODCODE,MECODE,FACTCODE,MULT,MECURRENT,MECURRENT2,T_JL_BJXH.MODCODE,MODNAME
From ((T_YH_YHTZ Inner Join T_YH_YYTZ on T_YH_YYTZ.UserCode=T_YH_YHTZ.UserCode)
Inner Join T_JL_BJTZ ON T_JL_BJTZ.MECODE=T_YH_YYTZ.METECODE)
Inner Join T_JL_BJXH ON T_JL_BJXH.MODCODE=T_JL_BJTZ.MODCODE
WHERE T_YH_YHTZ.USERTYPE=2 AND T_YH_YHTZ.BOOKCODE ='#cell(3,1)'
ORDER BY T_YH_YHTZ.BOOKCODE,T_YH_YHTZ.USERCODE
8 楼
YHGDSYH [专家分:0] 发布于 2006-10-25 20:52:00
6楼楼主,你所讲的确实是有道理,看起来也是个高手,可就是不行?怎么办啊?你有时间吗?可是我想,三个表不要()却能运行,为何四个表要加()还是不行啊?
9 楼
wdkshp [专家分:5490] 发布于 2006-10-26 10:29:00
select子句中字段前面最好全部都加"表名."
你这么试一下:
1.将where子句和group by子句均不要,看行不行。我估计应该实行的;
2.再加上where子句看行不行;
3.再加上group by子句看行不行;
如果不行,你再将错误信息贴出来,好不好?
开始我也说了关于T_YH_YHTZ.BOOKCODE ='#cell(3,1)'的问题,你这样肯定是不行的,因为你的#cell(3,1)是一个字符串变量对吧,要改成T_YH_YHTZ.BOOKCODE ='" & #cell(3,1) & "'",如果不是字符串变量,则改成T_YH_YHTZ.BOOKCODE =数据类型转换函数名称(" & #cell(3,1) & ")"
一般来说,不管是多少表,建议你都加上(),尽量不要将断句交给电脑,电脑不是万能的,有些复杂的甚至简单的任务他都执行不了的
10 楼
YHGDSYH [专家分:0] 发布于 2006-10-26 19:53:00
WDKSHP:出错信息:执行语句出错,其余与所写的SQL语句相同.
我来回复