在PostgreSQL中选择未读文档(连接?)
我有一个包含用户的PostgreSQL表,一个包含文档的PostgreSQL表,以及一个将用户映射到他们所读文档的表。像这样: 表:用户在PostgreSQL中选择未读文档(连接?),sql,postgresql,Sql,Postgresql,我有一个包含用户的PostgreSQL表,一个包含文档的PostgreSQL表,以及一个将用户映射到他们所读文档的表。像这样: 表:用户 ------------ | oid | | username | | ... | ------------ 表:文件 ------------ | oid | | title | | ... | ------------ 表:用户和文件 ------------ | oid | | title
------------
| oid |
| username |
| ... |
------------
表:文件
------------
| oid |
| title |
| ... |
------------
表:用户和文件
------------
| oid |
| title |
| ... |
------------
-----------------
| oid |
| user_oid |
| document_oid |
-----------------
每当用户读取文档时,都会将一条记录添加到用户的文档中,其中包含用户id和文档id。这一切都可以正常工作
不过,我想做的是为给定用户随机选择一个未读的文档。我觉得我应该可以通过一个相当简单的连接来实现这一点,但是我不能完全理解查询应该是什么样子
有人能帮忙吗?谢谢。对于大多数数据,您可以转到用户文档表。例如, 用户读取的文档的查询_oid=?会是
SELECT document_oid
FROM users_documents
WHERE user_oid = ?
但是,您需要丢失的记录
您可以进行外部联接,并在结果中查找空值
SELECT users_documents.document_oid
FROM users_documents
RIGHT OUTER JOIN documents
ON users_documents.document_oid = documents.oid AND users_documents.user_oid = ?
“users\u documents.user\u oid=?”必须位于FROM子句的联接中,而不是WHERE子句中,因为它在WHERE子句中不起作用。谢谢,我已经用user\u oid=?”尝试过了?在WHERE子句中,而不是在FROM子句中!