[SQL] Access 在 LEFT JOIN 巢狀語法中使用 INNER JOIN

在 Access SQL 線上手冊中有記載:

在 INNER JOIN 之中可以寫一個巢狀式的 LEFT JOIN 或一個 RIGHT JOIN,但是在一個 LEFT JOIN 或一個 RIGHT JOIN 之中不能寫巢狀式的 INNER JOIN。 請參閱 INNER JOIN 主題中有關使用巢狀的討論,從其中可獲知如何在其它連接中撰寫巢狀連接的資訊。

線上手冊連結:Access 2003Access 2007Access 2010(沒有詳述)

在 SQL Server 中是允許在 LEFT JOIN 巢狀語法中使用 INNER JOIN,但是在 Access 中不允許,所以將語法調整成兩種都能共用的情形,語法使用代號來表示,欄位改為 * ,真實使用時,建議僅 SELECT 必要欄位即可。

原始需求經過精簡後,簡化如下:

SELECT *
FROM Table1
LEFT JOIN Table2
INNER JOIN Table3  ON (Table2.Key2=Table3.Key3)
LEFT JOIN Table4  ON (Table2.Key2=Table4.Key4)
ON Table1.Key1=Table2.Key2
;

這個語法在 SQL Server 可以跑,在 Access 下就不能跑,所以 Access 語法就必須調整為:

SELECT *
FROM Table1
LEFT JOIN
(SELECT *
FROM (
(SELECT * FROM Table2) AS Table2
INNER JOIN
(SELECT * FROM
(SELECT * FROM Table3 WHERE Table3限制條件)
) AS Table3
ON (Table2.Key2=Table3.Key3)
)
LEFT JOIN
(SELECT * FROM
(SELECT * FROM Table4 WHERE Table4限制條件)
) AS Table4
ON (Table2.Key2=Table4.Key4)
) AS Table2
ON Table1.Key1=Table2.Key2
;

也就是說,所有表格都改為暫存表格,前後兩個語法在 SQL Server 中做成本評估,大概只差不到千分之一。透過繞路的方式達到讓 Access 在 LEFT JOIN 巢狀語法中使用 INNER JOIN 。

廣告
Categories: 自用整理, 資料庫, 技術分享 | 2 則迴響

文章分頁導航

2 thoughts on “[SQL] Access 在 LEFT JOIN 巢狀語法中使用 INNER JOIN

  1. 小劉

    大大老師你好有一個Access的問題想請你幫我解答
    我有一個庫存資料表
    兩個欄位下拉是選單我都做好了 只是型號拉下來都顯示全部

    我要做一個庫存資料表欄位有
    1 品名:飲料,麵包,泡麵,餅乾
    2型號: 飲料類 可樂,咖啡,烏龍茶……
    麵包類 波羅麵包,巧克力麵包,…..
    泡麵類 牛肉口味,豬肉口味, 速食,控肉…….
    餅乾類 乖乖餅乾,起士餅乾….

    我希望名品 選擇第一個下拉式選單欄位 飲料 在型號上的下拉是選單都是同一類不會出其他類型 的型號
    選麵包 在型號欄位的下拉式選單只出現 麵包類型的型號

    按讚數

  2. 回應是針對這篇內容來討論,不要濫用功能。
    有問題到論壇去問,不是把別人的部落格當論壇。
    http://social.msdn.microsoft.com/Forums/zh-TW/categories/

    按讚數

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

在WordPress.com寫網誌.

%d 位部落客按了讚: