2

我有一个具有唯一 ID 的提案表。我有另一个表格,其中包含对提案的投票,与正确的提案 ID 以及每行投票的投票和用户名相关联。

现在,我想向一位个人用户展示他尚未对哪些提案进行投票。我该如何做到这一点,可能在一个用户的一个查询中?

表架构:

建议:

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。

4

2 回答 2

4

查询一位用户:

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 回答
1

以用户“jack”为例:

select * 
from Proposals 
where not pr_id in (select pr_id from Votes where user='jack')

SQL小提琴在这里

于 2013-10-16T06:31:35.863 回答