我需要帮助,我有三个mysql表,students
,staff
和message
。在message
表中,我有列message_from_cat
,如果邮件来自员工,则会保留1
,如果邮件来自学生,则会2
。
我还有一个列message_from
,其中包含发件人的id
,无论是员工还是学生。
现在这是我想要实现的伪代码。
select * from message left join students on message.message_from=student.student_id where message_from_cat=2
and left join staff on message.message_from=staff.staff_id where message_from=1.
请有人理解我的问题吗?
答案 0 :(得分:0)
请记住,当您离开外部联接时,您将从左侧("消息")表中获取所有行,即使ID未出现在加入表中(&# 34;学生"或"员工")。
这意味着您可以在FROM子句中连接这两个表,然后只使用case语句或coalesce()来选择哪个连接表具有您需要的列。
遵循你的伪:
select
message.*,
COALESCE(staff.staff_column, student.student_column) as staff_or_student
from message
left join students
on message.message_from=student.student_id
and message.message_from_cat=1
left join staff
on message.message_from=staff.staff_id
and message.message_from_cat=2
答案 1 :(得分:0)
我不确定你需要什么。你可以尝试
select * from message
left join students on message.message_from=student.student_id
where message_from_cat=2
UNION
SELECT *
FROM message
left join staff on message.message_from=staff.staff_id
where message_from=1
或者
select *
from message left join students on message.message_from=student.student_id
left join staff on message.message_from=staff.staff_id
where message_from=1
AND message_from_cat=2