Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询:联接+条件+顺序_Sql - Fatal编程技术网

SQL查询:联接+条件+顺序

SQL查询:联接+条件+顺序,sql,Sql,我有三张桌子: 用户使用\标识,使用\角色, messagemes_id,来自_use_id[fk->user.use_id],mes_create_at, message_usermes_use_id,mes_id[fk->message.mes_id],以_use_id[fk->user.use_id] 用户可以是use_role=1学生或use_role=2教师。 我必须让所有使用_type=1学生的用户按照上次与老师的联系进行排序。无论学生给老师写信还是老师给学生写信 我假设您使用ms

我有三张桌子: 用户使用\标识,使用\角色, messagemes_id,来自_use_id[fk->user.use_id],mes_create_at, message_usermes_use_id,mes_id[fk->message.mes_id],以_use_id[fk->user.use_id]

用户可以是use_role=1学生或use_role=2教师。
我必须让所有使用_type=1学生的用户按照上次与老师的联系进行排序。无论学生给老师写信还是老师给学生写信

我假设您使用ms sql:

select *
from
(
    select student.use_id, Message.mes_create_at, Message.from_use_id, Message_User.to_use_id
    from User student
    join Message on Message.use_id = student.use_id and student.use_role = 1
    join Message_User on Message_User.mes_id = Message.mes_id
    where Message_User.to_use_id in (select use_id from User where use_role = 2)

    union

    select Message_User.to_use_id, Message.mes_create_at, Message.from_use_id, Message_User.to_use_id
    from User teacher
    join Message on Message.use_id = teacher.use_id and teacher.use_role = 2
    join Message_User on Message_User.mes_id = Message.mes_id
    where Message_User.to_use_id in (select use_id from User where use_role = 1)
) as temp
order by mes_create_at desc

欢迎来到SO!请向我们展示您在问题上的当前进展,以便我们为您指明正确的方向!如果你只是抄袭,你将如何学习DStackoverflow Homework VerflowHi:我花了一整天在上面,但我写的最好的东西是:select*from select u.*,m.*,mu。*FROM user AS u internal JOIN message AS m ON u.use\u id=m.FROM\u use\u id internal JOIN message\u user AS mu ON u.use\u id=mu.to\u use\u id其中u.use\u role=1 ORDER BY m.mes\u create\u at AS us group BY us.use\u id,响应为:1060-重复列名'mes\u id'谢谢!我非常感谢你。我只需要修改一下你的答案并添加一个简单的东西,现在它就可以工作了:D修改:Message.use\u id->Message.from\u use\u id。附加代码:从你的答案中选择*作为temp1的temp1组。use\u id我很高兴你能利用它。