[SQL] SQL Server 與 Access 不同的怪地方:LEFT JOIN

先說,這篇是為了重現相同的狀況故意產生資料表跟查詢語法,就別跟我說有更好的語法了… 淚奔~
首先拿前面展示範例的這篇作為範本:[Access]資料庫 SQL 語法範例
資料表:

清單為記錄所有學生各科的成績
清單

DBID 姓名 科目 分數
1 小明 國文 95
2 小華 國文 100
3 小英 國文 87
4 小明 英文 99
5 小華 英文 94
7 小明 數學 91
8 小華 數學 96
9 小英 數學 89
在 Access 用這樣的 SQL 語法可以得到下面的結果:
SQL 語法
SELECT 名冊.姓名 As 姓名, 國文表.分數 AS 國文, 英文表.分數 AS 英文, 數學表.分數 AS 數學
FROM (((
清單 AS 名冊
LEFT JOIN 清單 AS 國文表 ON ((名冊.姓名=國文表.姓名) AND (國文表.科目=’國文’) AND (名冊.科目=’國文’)))
LEFT JOIN 清單 AS 英文表 ON ((名冊.姓名=英文表.姓名) AND (英文表.科目=’英文’) AND (名冊.科目=’國文’)))
LEFT JOIN 清單 AS 數學表 ON ((名冊.姓名=數學表.姓名) AND (數學表.科目=’數學’) AND (名冊.科目=’國文’)))
ORDER BY 名冊.姓名 ;
各科成績表

姓名 國文 英文 數學
小明 95 99 91
小英 87 89
小華 100 94 96
可是在 SQL Server 2008 R2 Developer 下,卻會變成:

必須把 SQL Server 語法變化成這樣才可以得到相同的結果,加入的內容底色為淺綠色:
SQL 語法
SELECT 名冊.姓名 As 姓名, 國文表.分數 AS 國文, 英文表.分數 AS 英文, 數學表.分數 AS 數學
FROM ((((
清單 AS 名冊
INNER JOIN 清單 AS 名冊表 ON ((名冊.姓名=名冊表.姓名) AND (名冊表.科目=’國文’) AND (名冊.科目=’國文’)))
LEFT JOIN 清單 AS 國文表 ON ((名冊.姓名=國文表.姓名) AND (國文表.科目=’國文’) AND (名冊.科目=’國文’)))
LEFT JOIN 清單 AS 英文表 ON ((名冊.姓名=英文表.姓名) AND (英文表.科目=’英文’) AND (名冊.科目=’國文’)))
LEFT JOIN 清單 AS 數學表 ON ((名冊.姓名=數學表.姓名) AND (數學表.科目=’數學’) AND (名冊.科目=’國文’)))
ORDER BY 名冊.姓名 ;
在資料庫移植時,也是要考慮到這種窘況啊~ 淚奔~
會造成不同查詢結果來說,這兩種資料庫應該有一個是設計錯誤的吧?到底是哪個啊~
補充:
在 Access 也可以這樣下查詢語法,當學生人數多或科目多的時候,會比上面的查詢語法有效率:
SQL 語法
SELECT 名冊.姓名, 國文成績表.分數 AS 國文, 英文成績表.分數 AS 英文, 數學成績表.分數 AS 數學
FROM (((
(SELECT DISTINCT 姓名 FROM 清單) AS 名冊
LEFT JOIN (SELECT 姓名, 分數 FROM 清單 WHERE  科目=’國文’) AS 國文成績表 ON 名冊.姓名=國文成績表.姓名)
LEFT JOIN (SELECT 姓名, 分數 FROM 清單 WHERE  科目=’英文’) AS 英文成績表 ON 名冊.姓名=英文成績表.姓名)
LEFT JOIN (SELECT 姓名, 分數 FROM 清單 WHERE  科目=’數學’) AS 數學成績表 ON 名冊.姓名=數學成績表.姓名)
ORDER BY 名冊.姓名;
Categories: 資料庫 | 發表留言

文章導覽

發表迴響

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

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

在 WordPress.com 建立免費網站或網誌.

%d 位部落客按了讚: