消息表 如何获取消息表和消息状态

消息表 MSG-INFO ID,TITLE,ISALL(是否发送给全部)
消息关联表 MSG-USER ID,MSGID,USERID,ISREAD
消息可以发送给全部用户和指定用户,发送给指定用户时,添加数据到消息关联表,
发送给全部用户时,不添加。在用户阅读后添加。

请问如何查询到指定用户的所有消息记录以及阅读状态。
用户还需要查询消息状态。
查询消息阅读状态的时候,因为发送给全部。无法查询到消息阅读记录。

你这里还需要一个用户表吧,我写了一个示范:

 WITH msg(MSGID,TITLE,ISALL) AS (
    SELECT 1,'msg1 for all',1 UNION
    SELECT 2,'msg2 for user1',0 UNION
    SELECT 3,'msg3 for user2',0 UNION
    SELECT 4,'msg4 for all',1 

),msg_user(id,MSGID,USERID,ISREAD) AS(
    SELECT 1,1,1,1 UNION
    SELECT 2,2,1,0 UNION
    SELECT 3,1,2,0 UNION
    SELECT 4,3,2,0 
),users(userid,username) AS (
    SELECT 1,'AAAAA' UNION
    SELECT 2,'BBBBB' UNION
    SELECT 3,'CCCCC'
)
SELECT * FROM (
    SELECT * FROM msg AS m , users AS u
) t
 LEFT JOIN msg_user AS mu ON mu.msgid= t.msgid  AND mu.userid=t.userid 
WHERE isnull(mu.userid,0)=CASE WHEN t.isall=0 THEN t.userid ELSE isnull(mu.userid,0) END
ORDER BY t.MSGID

对应isall=1 的会把所有用户关联出来,然后再根据msg_user表查看阅读状态,如果这个对没有对应记录就是未读(isread is null)
如果isall=0,那么仅关联msg_user中对应的用户