2012-07-19 106 views
0

我正在嘗試使用外部聯接進行查詢,並且過去我一直使用Oracle Pl/SQL,但現在正在嘗試學習MySQL。我試圖加入3個表格,USERS,USER_TYPE和GRADE。 USERS表包含列USER_TYPE_ID,它是USER_TYPE的外鍵,還包含列GRADE_ID,它是GRADE的外鍵。我需要外部連接,因爲用戶類型可能是學生,教師等,如果它是教員,那麼USER沒有等級,因此USER表中的NULL GRADE_ID。以下是我的查詢在過去使用(+)外連接的樣子。MySQL將Oracle Pl/SQL(+)轉換爲MySQL

SELECT A.USER_NAME 
    , A.USER_TYPE_ID 
    , B.USER_TYPE_DESC 
    , A.GRADE_ID 
    , C.GRADE_DESC 
    FROM USERS A 
    , USER_TYPE B 
    , GRADE C 
WHERE A.USER_TYPE_ID = B.USER_TYPE_ID 
    AND A.GRADE_ID = C.GRADE_ID (+); 

有人能幫我把這個翻譯成MySQL查詢嗎?

在此先感謝!

回答

1
SELECT u.user_name, u.user_type_id, ut.user_type_desc, u.grade_id, g.grade_desc 
FROM users u JOIN user_type ut ON (ut.user_type_id = u.user_type_id) 
LEFT JOIN grade g ON (u.grade_id = g.grade_id); 
+0

感謝您的輸入RC,但該查詢仍然只抓住有一個等級(學生)的用戶,並拋出了所有的教師和管理人員,因爲他們根本不在一個檔次,併爲此他們GRADE_ID是空值。我需要查詢來獲取所有用戶,即使他們沒有GRADE_ID。 – Ryan 2012-07-19 01:27:55

+0

哦....對不起,我誤解了你的問題。對不起...我會更新 – 2012-07-19 02:02:09

+0

非常感謝RC,工作就像一個魅力。這將是我繼續使用MySQL時未來參考的一個很好的例子。 – Ryan 2012-07-19 02:14:15

0
SELECT u.user_name, u.user_type_id, ut.user_type_desc, u.grade_id, g.grade_desc 
FROM users u, user_type ut 
LEFT OUTER JOIN grade g ON u.grade_id = g.grade_id 
WHERE ut.user_type_id = u.user_type_id