2012-07-19 71 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