SQL:子查询辅助

时间:2009-11-02 09:19:15

标签: sql mysql subquery

我正在尝试在一个语句中而不是两个语句中选择两个值。第一个语句计算ID为18的特定比赛获胜的条目数。第二个语句计算该比赛的奖品总数。

查询1:

SELECT 

COUNT(*) FROM entries 

WHERE entries.contest=18

AND entries.won=1

查询2

SELECT SUM( quantity ) FROM prizes WHERE contest=18

我希望两者都有,所以我可以在服务器端进行比较并根据比较进行比较..所以,如果我们说有3名参赛者赢得了第18场比赛,第18场比赛的奖品总数是5,做点什么......

架构:

CREATE TABLE `entries` (
  `id` int(2) unsigned NOT NULL auto_increment,
  `message_id` bigint(8) unsigned default NULL,
  `user` int(2) unsigned default NULL,
  `username` varchar(50) NOT NULL,
  `contest` int(2) unsigned default NULL,
  `message` text,
  `icon` text,
  `twitter_url` text,
  `follower` int(2) unsigned default NULL,
  `entry_date` timestamp NOT NULL default '0000-00-00 00:00:00',
  `won` int(1) default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

CREATE TABLE `prizes` (
  `id` int(2) unsigned NOT NULL auto_increment,
  `name` varchar(25) NOT NULL,
  `contest` int(2) NOT NULL,
  `quantity` int(2) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

没有users表,因为我控制了条目,我很确定我不会得到任何重复项,这就是为条目行存储用户名等的原因。

1 个答案:

答案 0 :(得分:2)

由于查询根本没有任何共同点,您可以使用两个子查询来获得相同的结果:

select
  (select count(*) from entries where contest = 18 and won = 1) as wins,
  (select sum(quantity) from prizes where contest = 18) as quantity