2

一意の ID を持つ提案のテーブルがあります。提案に対する投票を含む別のテーブルがあり、適切な提案 ID と、行ごとに投票した投票とユーザー名にリンクされています。

ここで、まだ投票していない提案を 1 人のユーザーに示したいと思います。おそらく1人のユーザーに対して1つのクエリで、どうすればよいでしょうか?

テーブル スキーマ:

提案:

pr_id  proposal
1      proposal_text1
2      proposal_text2
3      proposal_text3

投票:

vote_id  pr_id  vote  user
1        1      yes   jack
2        1      no    jill
3        2      yes   jack

たとえば、提案 2 と 3 にはまだ投票していないことを jill に伝えたいとします。

4

2 に答える 2

4

1 人のユーザーのクエリ:

SELECT  a.*
FROM    Proposals a
        LEFT JOIN Votes b
            ON  a.pr_id = b.pr_id
                AND b.user = 'jack'
WHERE   b.pr_id IS NULL

すべてのユーザーと彼が投票しなかった提案を表示するためのクエリ:

SELECT  DISTINCT a.*, b.user
FROM    Proposals a
        CROSS JOIN Votes b
        LEFT JOIN Votes c
            ON  a.pr_id = c.pr_id
                AND b.user = c.user
WHERE   c.pr_id IS NULL
ORDER   BY b.user, a.pr_id
于 2013-10-16T06:23:42.507 に答える