查询泛化表

时间:2013-01-08 14:04:36

标签: mysql sql select union

好吧,我有一些像这样的桌子..

table TopicForum
-------------------------
 - idforum (PK)
 - iduser (FK)
 - subject
 - content


table Usermember
--------------------------------
-iduser (PK)
-password
-accesslevel

table student
-------------------------------
-idstudent (PK)
-iduser (FK)
-name

table teacher
---------------------------------
-idtecher (PK)
-iduser(FK)
-name

table admin
-----------------------------------
-idadmin (PK)
-iduser(FK)
-name

所以我希望在学生教师 iduser 在TopicForum参考中显示名称管理员 ..

请帮助谢谢

2 个答案:

答案 0 :(得分:0)

尝试:

SELECT DISTINCT tf.Subject
FROM TopicForum tf
INNER JOIN (
    SELECT iduser FROM Student
    UNION 
    SELECT iduser FROM Teacher
    UNION
    SELECT iduser FROM Admin
) u ON tf.iduser = u.iduser

我不太明白为什么要区分iduseridteacher。除非你想以某种方式格式化它们(但为什么?)我建议将这两列合并到一个唯一的id列中,该列可以是usermember表的一对一关系。

答案 1 :(得分:0)

试试这个:

SELECT DISTINCT A.name, A.iduser 
FROM (SELECT NAME, iduser FROM Student
      UNION 
      SELECT NAME, iduser FROM Teacher
      UNION
      SELECT NAME, iduser FROM Admin) AS A 
INNER JOIN TopicForum tf ON A.iduser = tf.iduser