今天写sql用到关联,left join 走起,结果...报错了
上一下sql,(把里面的元素替换掉了,这样也能看懂不是)
SELECT
A.aid
B.bname
C.csex
D.dname
E.ename
F.fname
FROM
Admin A,
Boy B,
Classmate C
LEFT JOIN Dog D
ON
(C.cid = D.did)
LEFT JOIN (
SELECT eid,ename FROM Element
) E
ON(
C.cid = E.eid
)
LEFT JOIN Friend F
ON(
A.aid = F.fid
)
让我们来看一下错误信息
1) [Code: -338, SQL State: 42972] An ON clause associated with a JOIN operator or in a MERGE statement is not valid.. SQLCODE=-338, SQLSTATE=42972, DRIVER=4.22.29
2) [Code: -727, SQL State: 56098] An error occurred during implicit system action type "2". Information returned for the error includes SQLCODE "-338", SQLSTATE "42972" and message tokens "42972".. SQLCODE=-727, SQLSTATE=56098, DRIVER=4.22.29
好吧,这个错误意思就是说,与JOIN操作符或MERGE语句相关联的ON子句无效。ON出问题了。
【原因】left join 是跟在一个表后面的,意思是说,在on中只能调用紧邻的表的元素,这里最后一个left join,on中调用了表A的元素,这样是错误的。
【修正】
SELECT
A.aid
B.bname
C.csex
D.dname
E.ename
F.fname
FROM
Admin A
LEFT JOIN Friend F
ON(
A.aid = F.fid
),
Boy B,
Classmate C
LEFT JOIN Dog D
ON
(C.cid = D.did)
LEFT JOIN (
SELECT eid,ename FROM Element
) E
ON(
C.cid = E.eid
)
ok,今天就到这儿,希望明年520不加班