我有一个消息表,其中包含消息,线程,工作组ID和工作组ID。当from_wg_id为null时,我知道该消息来自学生。如果它不为null,我知道该消息是来自工作组中的员工。当to_wg_id为null时,我知道该消息是对学生的回复,并且当from_wg_id不为null且to_wg_id不为null时,我知道该消息是从一个员工到前进另一个。这是我的挑战:我希望看到每个帖子中的所有工作组(为简单起见,我只在这里显示一个:19407),其中两者回复学生和 a转发给另一名员工。我怎么做?我已尝试过group by但我一直在输出中获得CESADM,因为那只有回复我不想表明。
源表:Message_log
Message_ID Thread_ID FROM_WG_ID TO_WG_ID
1 19407 CESADM NULL
2 19407 NULL SCHOLAR
3 19407 NULL SCHOLAR
4 19407 SCHOLAR NULL
5 19407 SCHOLAR CESADM
所需的输出表:Message_log
Thread_ID FROM_WG_ID
19407 SCHOLAR
如何编写将生成所需输出表的查询? (此输出的原因是SCHOLAR是线程19407中唯一具有转发和回复消息的工作组)
答案 0 :(得分:1)
您可以使用EXISTS
查看是否找到了转发给其他员工:
SELECT
Thread_ID,
TO_WG_ID
FROM Messages M1
WHERE FROM_WG_ID IS NULL
AND EXISTS(
SELECT NULL FROM Messages M2
WHERE M2.Thread_ID = M1.Thread_ID
AND M2.FROM_WG_ID = M1.TO_WG_ID
AND TO_WG_ID IS NOT NULL)