2013-10-16 40 views
2

我有一个含唯一ID的提案表。我还有另一张表格,其中包含有关投标的投票,并与适当的投标ID和每行投票的投票用户名称&相关联。查找MySQL中丢失的投票数

现在我想显示一个单独的用户,他没有投票的提案。我怎么做,可能在一个用户的查询中?

表模式:

建议:

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还。

+3

我们怎样才能知道不知道表模式? – Raptor

+0

@ShivanRaptor对不起,添加架构 – uncovery

回答

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 
+0

同意第一个。不同意最后一个。如果用户没有对任何提案进行投票,那么您将不会返回该用户的所有投标。 +1/2? –

+0

TBH第一个为我工作,不知道第二个人做什么100%。 – uncovery

+0

@uncovery你没有用户表。 –

1

使用用户 '杰克'作为例子:

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

SQL Fiddle here