1

我需要一个 SQL 查询来显示用户(uid)尚未投票的所有民意调查

例子:

  • 有 pid 1、2 和 3
  • uid 1 在投票 1 和 3 中投票

所以我需要向我显示他还没有投票的 pid 2 的查询。

这是2张桌子:

CREATE TABLE IF NOT EXISTS `poll` (
`pid` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(200) NOT NULL,
`description` text NOT NULL,
`deadline` datetime NOT NULL,
PRIMARY KEY (`pid`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;


CREATE TABLE IF NOT EXISTS `votes` (
`vid` int(11) NOT NULL AUTO_INCREMENT,
`pid` int(11) NOT NULL,
`uid` varchar(20) NOT NULL,
`tid` int(11) NOT NULL,
`votes` int(11) NOT NULL DEFAULT '1',
PRIMARY KEY (`vid`),
KEY `pcid` (`pid`,`uid`),
KEY `uid` (`uid`),
KEY `tid` (`tid`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=19 ;

//编辑这应该使它更清楚

表的约束votes

ALTER TABLE `votes`
ADD CONSTRAINT `votes_ibfk_3` FOREIGN KEY (`pid`) REFERENCES `poll` (`pid`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `votes_ibfk_4` FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `votes_ibfk_5` FOREIGN KEY (`tid`) REFERENCES `teams` (`tid`) ON DELETE CASCADE ON UPDATE CASCADE;

可以smbdy请帮助我。我想这是与 WHERE 而不是 LIKE 的连接,但我就是不明白。

谢谢!

4

3 回答 3

3

好的,这是我的第一个答案。我可能有更多的可能性,但这应该可行。

SELECT * FROM Poll WHERE pid NOT IN (SELECT pid FROM votes WHERE uid = 1);

我不是 100% 确定这会起作用,因为我不知道您尝试从中检索数据的数据库类型。

于 2012-11-16T14:00:41.697 回答
1

SELECT
    [poll].*
FROM
    [poll]
    LEFT OUTER JOIN [votes]
        ON [votes].[pid] = [poll].[pid]
        AND [votes].[uid] = @uid
WHERE
    [votes].[vid] IS NULL
于 2012-11-16T13:51:50.593 回答
0
Select
  p.*
From
  poll p
Where
  Not Exists (
    Select 
      'x'
    From
      Votes v
    Where
      v.pid = p.pid and
      v.uid = <myuidvalue>
  )
于 2012-11-16T13:49:45.810 回答