1

ユーザー(uid)がまだ投票していないすべての投票を表示するSQLクエリが必要です。

例:

  • pid 1、2、3があります
  • uid1が投票1と3に投票しました

したがって、彼がまだ投票していないpid2を表示するクエリが必要です。

これは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 に答える