===問題===SQL LEFT JOIN奇怪的語法錯誤?
我在3個表上使用了LEFT JOIN,SQL表達式。當我嘗試運行MS ACCESS 2007時,出現意外錯誤「JOIN表達式不受支持」。
===細節===
這些表都連接
- 父:是在最高水平
- child1:父母的孩子
- 的child2:父 的孩子
- 孫子1:小孩1
這是SQL表達式導致錯誤:
SELECT *
FROM ((grandchild1 AS gc
LEFT JOIN child1 AS c1 ON gc.child1_id=c1.id)
LEFT JOIN parent AS p ON c1.parent_id=p.id)
LEFT JOIN child2 AS c2 ON (p.id=c2.parent_id
AND c2.start<=gc.time AND gc.time<=c2.stop)
奇怪的是,下面的表達式中,我只在更換了布爾表達式的一個與真「ON」條款並得到接受:
SELECT *
FROM ((grandchild1 AS gc
LEFT JOIN child1 AS c1 ON gc.child1_id=c1.id)
LEFT JOIN parent AS p ON c1.parent_id=p.id)
LEFT JOIN child2 AS c2 ON (TRUE
AND c2.start<=gc.time AND gc.time<=c2.stop)
===問題===
- 是有什麼毛病 語法我的表達?
- 我注意到的另一件事是我不能在ON子句中使用EXISTS子句 ,這是正常的嗎?
===解決方案===(感謝大衛-W-芬頓)
SELECT *
FROM ((grandchild1 AS gc
INNER JOIN child1 AS c1 ON gc.child1_id=c1.id)
INNER JOIN parent AS p ON c1.parent_id=p.id)
INNER JOIN child2 AS c2 ON (p.id=c2.parent_id)
AND (c2.start<=gc.time) AND (gc.time<=c2.stop)
謝謝大衛。正如你所說的,使用QBE讓訪問構建連接就能提供解決方案。我試着用左連接替換它使用的INNER JOIN,但是導致錯誤返回。它也似乎不喜歡我把括號之間的ON子句(我認爲我實際上在幫助它),但它似乎沒有在ON子句中的表的順序問題。我想它使用INNER JOINs更有意義,所以我會堅持。我很高興它解決了。它真的讓我瘋狂 – symbiont 2010-10-07 04:11:41
利用QBE。它確實可以讓你的生活更容易獲得Jet/ACE的正確語法。 – 2010-10-08 01:52:51