作者memexo (猴吱吱)
看板Programming
标题[问题] SQL JOIN USING 相关问题
时间Fri Mar 21 18:03:22 2014
SELECT ACT_S, /*Q : 为什麽有些栏位不须指定table前置词,
ex:PD.ACT_S,若是加上前置词,
会抛错"PD.ACT_S": invaild identifier*/
PD.ACT_N, /*Q : 又有些栏位一定要加上特定table的前置词,
ex:AD_N,就会抛错"column ambiguously defined"*/
COST,
PD.OG_S,
OL_S,
OG.OG_NO
FROM OG
LEFT JOIN OL
USING(OG_S)
LEFT JOIN PD
USING(OL_S)
LEFT JOIN AD
USING(ACT_S)
WHERE PD.OG_S = '20140320A'
AND OG_NO = '20130320B'
AND OL_S = '20140320C'
/*Q: 使用USING()来JOIN table顺序上是不是有甚麽特别要求?
ex上例 :
FROM OG FROM OG
LEFT JOIN OL --- LEFT JOIN PD
USING(OG_S) | USING(OL_S)
LEFT JOIN PD | LEFT JOIN AD
USING(OL_S) |OL 的JOIN 移到最後,变成 => USING(ACT_S)
LEFT JOIN AD | LEFT JOIN OL
USING(ACT_S) | USING(OG_S)
<--|
如果改成这样,会抛错"column ambiguously defined",
但若是使用 JOIN ON 就不会有错
*/
table内容如下:
OG 栏位 =>
OG_S P.K / INDEX
OG_NO INDEX
OL 栏位 =>
OL_S P.K / INDEX
OG_S INDEX
COST
PD 栏位 =>
PD_S P.K / INDEX
OG_S INDEX
OL_S
ACT_S
ACT_N
AD 栏位 =>
ACT_S P.K / INDEX
ACT_N
我苦恼了两天,怎麽样都看不懂USING JOIN 跟选择栏位的规则,
拜托版上神手大大们解救
感激不尽 > <
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 125.227.141.182
1F:→ MOONRAKER:SQL这样写真不习惯 118.163.12.174 03/21 18:43
2F:推 Killercat:我觉得花点力气导入ORM会比较符合你需求 59.124.251.135 04/07 14:14