0

私たちは多対多の関係にあるデータを持っており、各メンバーが勉強している科目を選択できます。このデータは論理的な削除パターンを使用します。このパターンでは、データが削除されたと見なされるまでDATETIMEarchivedフィールドが残ります。NULL

私たちがやりたいことは、ユーザーが現在購読しているサブジェクトを無視して、現在購読していないサブジェクトを選択することです。

これはテーブル構造です:

`member`
- id
- name
- created
- updated
- archived

`subject`
- id
- name
- created
- updated
- archived

`member_subject`
- member_id
- subject_id
- created
- archived

基本的なクエリ構造は次のとおりです。

SELECT DISTINCT subject.*
FROM subject
LEFT JOIN member_subject ON member_subject.subject_id = subject.id
WHERE subject.archived IS NULL

# Not sure how to go about the rest of the WHERE clause here

ORDER BY subject.name
4

2 に答える 2

0

このクエリを試してください -

SELECT s.id
FROM subject s
LEFT JOIN member_subject ms
  ON ms.subject_id = s.id
GROUP BY s.id
HAVING COUNT(ms.subject_id) = 0

...必要な WHERE フィルターを追加します。

于 2013-01-29T07:23:33.980 に答える
0

これにより、現在サブスクライブされていない各ユーザーのすべてのサブジェクトが生成されます。

SELECT  d.*, e.*
FROM    
        (
            SELECT  a.ID memberID, b.ID SubjectID
            FROM    member a, subject b
        ) c
        INNER JOIN member d
            ON c.memberID = d.ID
        INNER JOIN Subject e
            ON c.SubjectID = e.ID
        LEFT JOIN member_subject f
            ON  c.memberID = f.member_ID AND
                c.SubjectID = f.subject_ID
WHERE   f.member_ID IS NULL
        -- AND d.ID = ''                        -- <<== for specific userID
于 2013-01-29T07:28:06.543 に答える