我有以下表格:
学生
StudentID UserID FirstName LastName
1 1 John Doe
2 3 Peter Pan
3 5 Mark Twain
员工
EmployeeID UserID FirstName LastName
1 2 Juan Carlos
2 4 Joe Reyes
3 6 Ash Ketchum
用户
UserID Username
1 test1
2 test2
3 test3
4 test4
5 test5
6 test6
讯息
MessageID MessageFrom MessageTo Subject
1 1 2 test message
2 4 3 another test message
3 3 5 another test message
我想像这样显示输出
MessageID MessageFrom MessageTo Subject
1 John Doe Juan Carlos test message
2 Joe Reyes Peter Pan another test message
3 Peter Pan Mark Twain another test message
MessageFrom
和MessageTo
返回位于Users表中的UserID
的外键值。学生可以向员工发送消息,反之亦然。他们也可以在学生和员工之间发送。
答案 0 :(得分:2)
我认为这又是The X Y Problem。
为什么要将Users
分为两部分?
为什么不这样做(这将解决整个问题):
UserID | FirstName | LastName | UserName | Type
-------------------------------------------------------
1 John Doe test1 1
2 Juan Carlos test2 2
3 Mark Twain test3 1
并添加表格类型
TypeId | TypeName
1 Students
2 Employees
这样,您可以为用户提供2个表,而不是3个。 所有用户和名称都与it should be位于同一个表中。
答案 1 :(得分:1)
这应该可以解决问题,因为您不关心消息是否与学生或员工有关,您可以将这两个表联合起来。
SELECT
MessageID,
(FromTable.FirstName + ' ' + FromTable.LastName) AS MessageFrom,
(ToTable.FristName + ' ' + ToTable.LastName) AS MessageTo,
Subject
FROM
Messages
INNER JOIN
(
(SELECT UserID, FirstName, LastName FROM Students)
UNION
(SELECT UserID, FirstName, LastName FROM Employees)
) AS FromTable ON FromTable.UserID = Messages.MessageFrom
INNER JOIN
(
(SELECT UserID, FirstName, LastName FROM Students)
UNION
(SELECT UserID, FirstName, LastName FROM Employees)
) AS ToTable ON ToTable.UserID = Messages.MessageTo