回 帖 发 新 帖 刷新版面

主题:三个表能连接,再加一个表内外连接都更不行?

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个回复)

沙发

什么数据库?
Access和SQL中,关联数据表的语法不太一样。Access里面不能连续用join

板凳

字段名称和连接关系都没书写错误的前提下
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 楼

[quote]什么数据库?
Access和SQL中,关联数据表的语法不太一样。Access里面不能连续用join[/quote]

access里面能够使用inner join,我用过好多次都能正确运行

4 楼


WDKSHP:你好,我所使用的是SQL SERVER 2000库.

5 楼

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 楼

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 楼

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 楼

6楼楼主,你所讲的确实是有道理,看起来也是个高手,可就是不行?怎么办啊?你有时间吗?可是我想,三个表不要()却能运行,为何四个表要加()还是不行啊?

9 楼

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 楼

WDKSHP:出错信息:执行语句出错,其余与所写的SQL语句相同.

我来回复

您尚未登录,请登录后再回复。点此登录或注册