作者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