根据另一个单元格的值在查询中加入mysql表

时间:2016-01-10 11:58:49

标签: php mysql join

我需要帮助,我有三个mysql表,studentsstaffmessage。在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.

请有人理解我的问题吗?

2 个答案:

答案 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