0

ユーザーを含む PostgreSQL テーブル、ドキュメントを含む PostgreSQL テーブル、およびユーザーが読んだドキュメントにユーザーをマッピングするテーブルがあります。そのようです:

表: ユーザー

------------
| oid      |
| username |
| ...      |
------------

表: ドキュメント

------------
| oid      |
| title    |
| ...      |
------------

表: users_documents

-----------------
| oid           |
| user_oid      |
| document_oid  |
-----------------

ユーザーがドキュメントを読むたびに、ユーザー ID とドキュメント ID を含むレコードが users_documents に追加されます。これはすべて正常に機能しています。

私がやりたいことは、特定のユーザーのランダムな未読ドキュメントを選択することです。かなり単純なJOINでこれを行うことができるはずだと思いますが、クエリがどのように見えるべきかを正確に理解することはできません.

誰か助けてくれませんか?ありがとう。

4

1 に答える 1

1

ほとんどのデータについては、users_documents テーブルに移動できます。たとえば、 user_oid = ? によって読み取られるドキュメントのクエリは次のようになります。だろう

SELECT document_oid
FROM users_documents
WHERE user_oid = ?

ただし、欠落しているレコードが必要です。

外部結合を実行して、結果に NULL を見つけることができます。

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_documents.user_oid = ?」が重要です。WHERE 句では機能しないため、WHERE 句ではなく FROM 句の結合に含めます。

于 2013-01-07T16:59:56.250 に答える