我有一个DB2表(messages
),用于跟踪用户之间的消息。有一列message_id
以及一个跟踪回复名为response_id
的列(message.response_id
是键入message.id
这是线程中的第一条消息,因此给定线程中除第一条消息之外的任何消息将具有相同的response_id
,而线程中的第一条消息有一个null
message.response_id
)。SQL查询count AND存在
还有另一个表(reads
)跟踪消息的读取内容,并通过名为reads.message_id
的列FK返回到messages
表。
由于一个错误,一些消息读取没有得到记录。
我需要找到所有message
S其中message.response_id
不为空(所以他们不是父消息)没有纪录reads
(再好reads.message_id = message.id
),但父消息确实有一个有效的read
(所以对于给定的子女message
,存在匹配reads.message_id = message.response_id
的记录)。
这可能吗?或者我应该只是查询主消息表,抓住message.response_id
不为空的所有项目,然后从这些查询中确定父记录是否有read
记录?
伪SQL:
SELECT * FROM messages m WHERE m.response_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM reads r WHERE m.id = r.message_id)
AND EXISTS (SELECT 1 FROM reads r2 WHERE m.response_id = r2.message_id)
我可能会错过一些东西,但我认为你的“伪SQL”看起来像实际的SQL,它应该完全按照你的意思去做。它究竟如何不足? –