急求关于left join on ,在线等候
三表如下:
-------------
VENDOR_TAB 客户信息表
VD_ID
VD_ENAME
VD_CNAME
.......
VENDORMUL_TAB 客户别名表
VENDORMUL_ID
VENDORMUL_ENAME
VENDORMUL_CNAME
VENDORMUL_VDID ----- 对应 VENDOR_TAB.VD_ID
.....
VDVISIT_TAB 拜访客户的信息表
VDVISIT_ID
VDVISIT_VDID ----- 对应 VENDOR_TAB.VD_ID
VDVISIT_UID ----- 对应 USER_TAB.USER_ID < 用户ID
......
USER_TAB 系统用户表
USER_ID
USER_ENAME
USER_CNAME
USER_POSITION
.....
这张表是我要显示的 动态查询,
'--------------------------------------------------------
'VDVISIT_TAB '
' VDVISIT_ID '
' VDVISIT_VDID ----- 对应 VENDOR_TAB.VD_ID '
' VDVISIT_UID ----- 对应 USER_TAB.USER_ID '
'--------------------------------------------------------
如何实现对VDVISIT_TAB表的查询 满足以下条件: 注意 是'VDVISIT_TAB表
vender name: _____ < 根据vendor 的名称,同时检索别名表 (同时检索中英文名) >
user name ______
------------------------
我试过下面出错
sqlA="select * From VDVISIT_TAB"
<!----------- if search by vendor name -------------------------------->
sqlb="left join VENDOR_TAB on VDVISIT_TAB.VDVISIT_ID=VENDOR_TAB.VD_ID"_
&"left join VENDORMUL_TAB on VDVISIT_TAB.VDVISIT_ID=VENDORMUL_TAB.VENDORMUL_VDID"
sqlc=" where ( VENDOR_TAB.VD_ENAME like '% vendorname_param %' or "_
&" VENDOR_TAB.VD_CNAME like '% vendorname_param %' or "_
&" VENDORMUL_TAB.VENDORMUL_ENAME like '% vendorname_param %' or "_
&" VENDORMUL_TAB.VENDORMUL_CNAME like '% vendorname_param %' ) "
<!-------------------end of search by vendor name -------------------->
<!-----------------------if search by User name ----------------------------->
sqlb=sqlb & " left join USER_TAB on VDVISIT_TAB.VDVISIT_UID=USER_TAB.USER_ID "
<!---- if sqlc is empty then ---->
sqlc=sqlc & " where USER_TAB.USER_NAME like '% username_param %'
<!-----else if sqlc is not empty then --->
sqlc=sqlc & " and USER_TAB.USER_NAME like '% username_param %'
<!----------------------------end search by user name ------------------------>
sql=sqlA & sqlB & sqlC
....
Syntax error (missing operator) in query expression 'VDVISIT_TAB.VDVISIT_VDID=VENDOR_TAB.VD_ID left join VENDORMUL_TAB on VDVISIT_TAB.VDVISIT_VDID=VENDORMUL_TAB.VENDORMUL_VDID'
谢谢
问题点数:0、回复次数:13Top
1 楼lsxaa(小李铅笔刀)回复于 2004-12-01 12:27:32 得分 0
先把整个sql 在程序中显示出来看看 是什么样的
Top
2 楼Justin1818(木鱼5)回复于 2004-12-01 12:46:19 得分 0
SQL显示如下:
select * from VDVISIT_TAB left join VENDOR_TAB on VDVISIT_TAB.VDVISIT_VDID=VENDOR_TAB.VD_ID left join VENDORMUL_TAB on VDVISIT_TAB.VDVISIT_VDID=VENDORMUL_TAB.VENDORMUL_VDID where ( VENDOR_TAB.VD_ENAME like '%try%' or VENDOR_TAB.VD_CNAME like '%try%' or VENDORMUL_TAB.VENDORMUL_ENAME like '%try%' or VENDORMUL_TAB.VENDORMUL_CNAME like '%try%' )Top
3 楼lsxaa(小李铅笔刀)回复于 2004-12-01 12:49:36 得分 0
语句看起来没有问题,有查询分析器么,放到里面执行一下,试试
select *
from VDVISIT_TAB
left join VENDOR_TAB on VDVISIT_TAB.VDVISIT_VDID=VENDOR_TAB.VD_ID
left join VENDORMUL_TAB on VDVISIT_TAB.VDVISIT_VDID=VENDORMUL_TAB.VENDORMUL_VDID
where ( VENDOR_TAB.VD_ENAME like '%try%' or
VENDOR_TAB.VD_CNAME like '%try%' or
VENDORMUL_TAB.VENDORMUL_ENAME like '%try%' or
VENDORMUL_TAB.VENDORMUL_CNAME like '%try%'
)Top
4 楼Justin1818(木鱼5)回复于 2004-12-01 13:15:18 得分 0
查询分析器
错误信息:
Syntax error (missing operator) in query expression 'VDVISIT_TAB.VDVISIT_VDID=VENDOR_TAB.VD_ID left join VENDORMUL_TAB on VDVISIT_TAB.VDVISIT_VDID=VENDORMUL_TAB.VENDORMUL_VDID'
一样
Top
5 楼lsxaa(小李铅笔刀)回复于 2004-12-01 13:53:24 得分 0
联接列的类型一致么????Top
6 楼lh1979(rocket)回复于 2004-12-01 15:04:18 得分 0
”select *“ 这边指定不明确
还有,你先两个表left join,如果成功了,在加一个join,这样试一下,应该能找出问题Top
7 楼xingfuniao(幸福鸟)回复于 2004-12-01 15:19:20 得分 0
在每個引號的後面或前面都加個空格呢
例如
sqlb=" left join VENDOR_TAB on VDVISIT_TAB.VDVISIT_ID=VENDOR_TAB.VD_ID "_ --
&" left join VENDORMUL_TAB onTop
8 楼Justin1818(木鱼5)回复于 2004-12-03 10:51:23 得分 0
一样的
还是同样的错误
啊....
郁闷啊...
Top
9 楼jiang130(Hong)回复于 2004-12-03 13:39:00 得分 0
sqla='(' +sqla +') as a'
后面的都用a作別名Top
10 楼jiang130(Hong)回复于 2004-12-03 13:43:04 得分 0
你要么把三個子查詢都當成表來關聯,要么先關聯再寫where條件Top
11 楼Justin1818(木鱼5)回复于 2004-12-05 11:30:45 得分 0
具体怎么写呀
Top
12 楼Justin1818(木鱼5)回复于 2004-12-06 10:31:46 得分 0
我改写后如下,但是出现重复记录:
如果查询只要用到别名表,就会出现重复记录,
<别名中多了一新加了了一个字段MODSCODE这个code
系统代码,对于每个客户都有一个代码,同时别名也对就一个代码,这个代码如名称一一对应的 >
如果一个客户有三个别名,就会出现三条记录(其实是重复的),SQL查询指令这所以认为不是重复的是因为当前客户有不同的别名;因为这三个别名都对应同一个客户名称,所以用户要求只显示一条记录)
比如,
vendor table 客户表
[vendor id] [vendor chinese name ] [vendor english name] [vendor mods code ]
1 chinese name 1 english name 1 vendor mods code1
vendor multi table 客户别名表
[vendor multi id] [vendor multi chinese name] [vendor multi english name] [vendor multi mods code] [vendor id]
1 multi chinese name 1 multi english name 1 multi modscode1 1
2 multi chinese name 2 multi english name 2 multi modscode2 1
3 multi chinese name 3 multi english name 3 multi modscode3 1
SQL语句如下:
select * From VDVISIT_TAB,VENDOR_TAB,VISITTYPE_TAB ,VENDORMUL_TAB WHERE VDVISIT_TAB.VDVISIT_VDID=VENDOR_TAB.VD_ID AND VDVISIT_TAB.VDVISIT_TYPE=VISITTYPE_TAB.VISITTYPE_ID AND VENDOR_TAB.VD_ID=VENDORMUL_TAB.VENDORMUL_VDID AND ( VENDOR_TAB.VD_MODSCODE LIKE '%MODS CODE%' OR VENDORMUL_TAB.VENDORMUL_MODSCODE LIKE '%MODS CODE%' )
--------------------------------------------------------------------------
用户要查找 mods code 类似如 vendor mods code1
将会显示如下结果:
chinese name 1 english name 1 vendor mods code1 multi mods code 1
chinese name 1 english name 1 vendor mods code1 multi mods code 2
chinese name 1 english name 1 vendor mods code1 multi mods code 3
如何过滤?
同要求统计总的记录数?
function BuildSearchParamVdrA()
dim sql
dim midsql
dim endsql
midsql=""
endsql=""
emptySqlA="select count(*) as total From VDVISIT_TAB,VENDOR_TAB,VISITTYPE_TAB "
sqlA="select * From "_
&" VDVISIT_TAB,VENDOR_TAB,VISITTYPE_TAB "
sqlB= " WHERE "_
& " VDVISIT_TAB.VDVISIT_VDID=VENDOR_TAB.VD_ID AND "_
& " VDVISIT_TAB.VDVISIT_TYPE=VISITTYPE_TAB.VISITTYPE_ID "
'如果用户要求按客户的名称来查询,或按客户的mods code 来查询都会牵涉到别名表
if (vdrsel<>0 and vdrselparam<>"") and vdrmodcode<>"" then
sqlA=sqlA & " ,VENDORMUL_TAB "
emptySqlA=emptySqlA & " ,VENDORMUL_TAB "
sqlB=sqlB & " AND VENDOR_TAB.VD_ID=VENDORMUL_TAB.VENDORMUL_VDID "
end if
if (vdrsel=0 and vdrselparam="") and vdrmodcode<>"" then
sqlA=sqlA & " ,VENDORMUL_TAB "
emptySqlA=emptySqlA & " ,VENDORMUL_TAB "
sqlB=sqlB & " AND VENDOR_TAB.VD_ID=VENDORMUL_TAB.VENDORMUL_VDID "
end if
if vdrselparam<>"" then
select case vdrsel
case 1 :
sqlB=sqlB &" AND ( VENDOR_TAB.VD_ENAME LIKE '%"&vdrselparam&"%' OR "_
&" VENDOR_TAB.VD_CNAME LIKE '%"&vdrselparam&"%' OR "_
&" VENDORMUL_TAB.VENDORMUL_ENAME LIKE '%"&vdrselparam&"%' OR "_
&" VENDORMUL_TAB.VENDORMUL_CNAME LIKE '%"&vdrselparam&"%' ) "
case 2 :
sqlB=sqlB & " AND VENDOR_TAB.VD_WEBSITE LIKE '%"&vdrselparam&"%' "
end select
end if
if vdrmodcode<>"" then
sqlB=sqlB & " AND ( VENDOR_TAB.VD_MODSCODE LIKE '%"&vdrmodcode&"%' OR "_
& " VENDORMUL_TAB.VENDORMUL_MODSCODE LIKE '%"&vdrmodcode&"%' ) "
end if
if vdrindexcode<>"" then sqlB=sqlB & " AND VENDOR_TAB.VD_INDEXCODE LIKE '%"&vdrindexcode&"%' "
'/***********Star Search Create/Update author / Date switch condition
select case vdropersel
case 1 :
if vdroperparam<>"" then
emptySqlA=emptySqlA & " ,USER_TAB "
sqlA=sqlA &" ,USER_TAB "
sqlB=sqlB &" AND VDVISIT_TAB.VDVISIT_CREATEBY=USER_TAB.USER_ID "_
&" AND USER_TAB.MSKID='"&vdroperparam&"' "
if vdrFrmdate<>"" and vdrEndDate="" then sqlB=sqlB & " AND #"&vdrFrmdate&"#<=VDVISIT_TAB.VDVISIT_CREATEDATE "
if vdrEndDate<>"" and vdrFrmdate="" then sqlB=sqlB & " AND VDVISIT_TAB.VDVISIT_CREATEDATE<=#"&vdrEndDate&"# "
if vdrFrmdate<>"" and vdrEndDate<>"" then sqlB=sqlB & " AND #"&vdrFrmdate&"#<=VDVISIT_TAB.VDVISIT_CREATEDATE AND VDVISIT_TAB.VDVISIT_CREATEDATE<=#"&vdrEndDate&"# "
end if
case 2 :
if vdroperparam<>"" then
emptySqlA=emptySqlA & " ,USER_TAB "
sqlA=sqlA &" ,USER_TAB "
sqlB=sqlB &" AND VDVISIT_TAB.VDVISIT_UPDATEBY=USER_TAB.USER_ID "_
&" AND USER_TAB.MSKID='"&vdroperparam&"' "
if vdrFrmdate<>"" and vdrEndDate="" then sqlB=sqlB & " AND #"&vdrFrmdate&"#<=VDVISIT_TAB.VDVISIT_UPDATEDATE "
if vdrEndDate<>"" and vdrFrmdate="" then sqlB=sqlB & " AND VDVISIT_TAB.VDVISIT_UPDATEDATE<=#"&vdrEndDate&"# "
if vdrFrmdate<>"" and vdrEndDate<>"" then sqlB=sqlB & " AND #"&vdrFrmdate&"#<=VDVISIT_TAB.VDVISIT_UPDATEDATE AND VDVISIT_TAB.VDVISIT_UPDATEDATE<=#"&vdrEndDate&"# "
end if
case 0 :
if vdrFrmdate<>"" and vdrEndDate="" then sqlB=sqlB & " AND #"&vdrFrmdate&"#<=VDVISIT_TAB.VDVISIT_UPDATEDATE "
if vdrEndDate<>"" and vdrFrmdate="" then sqlB=sqlB & " AND VDVISIT_TAB.VDVISIT_UPDATEDATE<=#"&vdrEndDate&"# "
if vdrFrmdate<>"" and vdrEndDate<>"" then sqlB=sqlB & " AND #"&vdrFrmdate&"#<=VDVISIT_TAB.VDVISIT_UPDATEDATE AND VDVISIT_TAB.VDVISIT_UPDATEDATE<=#"&vdrEndDate&"# "
end select
'/******************************************End Search Create/Update author / Date switch condition
'/*****************************************Start Search by Visit way ***************************
if visitsel<>0 then sqlB=sqlB & " AND VDVISIT_TAB.VDVISIT_TYPE="&visitsel &" "
BuildSearchParamVdrA=sqlA & sqlB
emptySql=emptySqlA & sqlB
end function
Top
13 楼jiang130(Hong)回复于 2004-12-06 11:12:20 得分 0
1.建儀用別名代替那么長的表名
select * From VDVISIT_TAB d,VENDOR_TAB a,VISITTYPE_TAB b,VENDORMUL_TAB c WHERE a.VDVISIT_VDID=b.VD_ID AND a.VDVISIT_TYPE=b.VISITTYPE_ID AND a.VD_ID=b.VENDORMUL_VDID AND ( a.VD_MODSCODE LIKE '%MODS CODE%' OR a.VENDORMUL_MODSCODE LIKE '%MODS CODE%'
2.如果你是用戶指定條件的查詢,建儀使用視圖
3.如果不方便使用視圖,應在前台用戶指定完條件后把它當成一個表,就象上面說的 sqla='(' +sqla +') as a' ,sqlb='(' +sqlb +') as b' 再加聯接條件on a.字段=b.字段 where a.字段....Top




